6

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

これが私が試したことです:

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

4

1 に答える 1