2010-11-14 155 views
11

我想在C++(或C++ 0x)中编写一个指针,指向一个类的运算符让我们说A或B. 是否有任何方法可以做到这一点?C++指向运算符的指针

当然有像

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(); 
} 

回答

22

不,你不能这样做。类类型是操作员成员函数类型的一部分。

A::operator()()的类型不同于B::operator()()的类型。前者为int (A::*)(),后者为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(); 
+0

比你非常!这正是我一直在寻找的! :) – 2010-11-14 10:18:23