我想用 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();
}
最佳答案
不,你不能这样做。类类型是运算符成员函数类型的一部分。
A::operator()()
的类型与B::operator()()
的类型不同。前者是 int (A::*)()
类型,后者是 int (B::*)()
类型。这些类型完全不相关。
最接近的方法是使用 C++0x 多态函数包装器 function
(在 C++0x、C++ TR1 和 Boost 中找到)和使用 bind
将成员函数指针绑定(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();
关于C++ 指向运算符的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176895/