【发布时间】:2013-08-18 07:13:53
【问题描述】:
有没有办法将运算符(特别是运算符>>)重载为函数指针,然后在运行时为其分配一个函数?我希望能够在运行时查看文件以确定文件的格式,然后将正确的函数指针分配给操作员以使其按需要工作。在调用运算符之前,我会在构造函数中分配正确的函数。我意识到还有其他(可能更简单)的方法可以做同样的事情,但我想知道这是否可能。
这是我尝试过的:
bool Flag; // In global scope - set in main()
class MyClass
{
private:
int data;
friend istream & function1(istream & in, MyClass & c);
friend istream & function2(istream & in, MyClass & c);
public:
MyClass() :data(0) {operator>>=((Flag)?&function1:&function2);}
friend istream& (*operator>>)(istream & in, C & c);
};
// function1 and function2 definitions go here
int main (int argc, char **argv)
{
if (argc > 2)
Flag = ((atoi(argv[1]) > 1) ? 1 : 0);
MyClass mcInstance;
ifstream in(argv[2]);
in >> mcInstance;
return 0;
}
我收到如下所示的错误:
error: declaration of ‘operator>>’ as non-function
【问题讨论】:
-
只需让您的
operator>>函数查看Flag并相应地修改其行为。 -
你可以创建一个指向操作符的函数指针,但是它会有一个正常的名字来调用。
标签: c++ operator-overloading function-pointers