C++ 指向运算符的指针

标签 c++ pointers c++11 function-pointers operator-keyword

我想用 c++(或 c++0x)编写一个指针,它将指向一个类的运算符,比如 A 或 B。 有什么方法可以做到吗?

当然有这样的语法

int (A::*_p) ();

但是并没有解决这个问题。我想制作通用指针,而不是为其指定基类 - 仅是“运算符函数”的指针

#include <thread>
#include <iostream>

using namespace std;

class A
{
public:
    int operator()()
    {
        return 10;
    }
};

class B
{
public:
    int operator()()
    {
        return 11;
    }
};

int main()
{
 A a;
 int (*_p) ();
 _p = a.operator();
 cout << _p();

 B b;
 _p = b.operator();
 cout << _p();
}

最佳答案

不,你不能这样做。类类型是运算符成员函数类型的一部分。

A::operator()() 的类型与B::operator()() 的类型不同。前者是 int (A::*)() 类型,后者是 int (B::*)() 类型。这些类型完全不相关。

最接近的方法是使用 C++0x 多态函数包装器 function(在 C++0x、C++ TR1 和 Boost 中找到)和使用 bind 将成员函数指针绑定(bind)到类实例:

std::function<int()> _p;

A a;
_p = std::bind(&A::operator(), a);
std::cout << _p();

B b;
_p = std::bind(&B::operator(), b);
std::cout << _p();

关于C++ 指向运算符的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176895/

相关文章:

c++ - 对 int 类型和无符号整数的值应用模运算

c++ - 异常安全和 make_unique

c++ - 将 cv::Mat A 的每个成员与 cv::Mat B 合并,以创建一个带有 [a(x,y),b(x,y)] 的 cv::Mat C

pointers - golang中slice的地址

opencv - Point3f 而不是 Point2f 用于 OpenCV 中的 KeyPoint

c++ - 实现 "Observer"模式的问题

c - 初始化指向在函数中动态分配的指针的指针

C++ 程序崩溃。图实现

c++ - 左移 (<<) 是 C++11 中的负整数未定义行为吗?

c++11 - 将 1 字节值和 3 字节值打包到单个 32 位结构中