我想让一个类operator()
根据类中设置的选项实现几种不同的方式。因为这会被调用很多次,所以我不想使用任何分支。理想情况下,这operator()
将是一个可以使用方法设置的函数指针。但是,我不确定这实际上会是什么样子。我试过:
#include <iostream>
class Test {
public:
int (*operator())();
int DoIt1() {
return 1;
}
int DoIt2() {
return 2;
}
void SetIt(int i) {
if(i == 1) {
operator() = &Test::DoIt1;
} else {
operator() = &Test::DoIt2;
}
}
};
int main()
{
Test t1;
t1.SetIt(1);
std::cout << t1() << std::endl;
t1.SetIt(2);
std::cout << t1() << std::endl;
return 0;
}
我知道如果我创建另一个函数指针并从函数中调用它,它将operator()
起作用。但是是否可以让operator()
函数本身成为函数指针?类似于我发布的内容(无法编译)?
上面的代码给出:
test.cxx:5:21: 错误: 'operator()' 声明为非函数
test.cxx:在成员函数'void Test::SetIt(int)'中:
test.cxx:17:16: 错误: 'operator()' 未定义
test.cxx:19:16: 错误: 'operator()' 未定义
test.cxx:在函数'int main()'中:
test.cxx:30:19: error: no match for call to '(Test) ()'</p>
test.cxx:34:19: error: no match for call to '(Test) ()'</p>