有沒有辦法將一個操作符(特別是操作符>>)重載爲一個函數指針,然後在運行時爲它分配一個函數?我希望能夠在運行時查看文件以確定文件的格式,然後將正確的函數指針分配給操作員,以使其正常工作。在調用操作符之前,我會在構造函數中分配正確的函數。我意識到還有其他(也許更簡單)的方法來做同樣的事情,但我想知道這是否可能。使C++重載操作符成爲函數指針
這裏是我的嘗試:
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
可能重複[是否有可能獲得內置標準運算符的函數指針?](http://stackoverflow.com/questions/17644816/is-it-possible-to-get-the-function-pointer-of-a-內置標準運算符) – aaronman
只需讓'operator >>'函數查看'Flag'並相應地修改其行爲。 –
您可以創建一個指向操作員的函數指針,但它將有一個正常的名稱來調用。 –