2010-11-14 108 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