演算子 (具体的には演算子 >>) を関数ポインターとしてオーバーロードし、実行時に関数を割り当てる方法はありますか? 実行時にファイルを調べてファイルの形式を確認し、正しい関数ポインタをオペレータに割り当てて、必要に応じて機能させたいと考えています。オペレーターが呼び出される前に、コンストラクターで正しい関数を割り当てます。同じことを行うには他にも(おそらくもっと簡単な)方法があることはわかっていますが、これが可能かどうか疑問に思っています。
これが私が試したことです:
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