c++ указатели на операторы
Я хочу написать указатель в c++ (или в c++0x), который будет указывать на оператор класса, скажем A или B. Есть ли способ сделать это?
Конечно, есть синтаксис, подобный
int (A::*_p) ();
Но это не решает этой проблемы. Я хочу сделать общий указатель, не указывая базовый класс для него-только указатель для "operator function"
#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();
}
1 ответ:
Нет, вы не можете сделать это. Тип класса является частью типа функции-члена оператора.
Тип
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();