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

Чем вам больше всего! это именно то, что я искал! :) –

Смежные вопросы