11

我想用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();
}
4

1 回答 1

22

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

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

最接近的方法是使用 C++0x 多态函数包装器function(可在 C++0x、C++ TR1 和 Boost 中找到)并将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();
于 2010-11-14T09:29:16.017 回答