2016-09-06 15 views
2

汎用インターフェースを作成したい。私はstd :: vector内の異なるオブジェクトのリストが必要です。これらのオブジェクトの各々は、他のタイプであるが、同じインターフェースを有する。例えば異なるタイプの汎用インターフェース

struct Base 
{ 
    std::string name; 

    virtual void doWork(???, ???); 
    virtual void print(???,???); 
}; 

struct ObjA : Base 
{ 
    void doWork(???,???) override 
    { 
     std::cout << "Hello\n"; 
    }; 
    void print(???,???) override 
    { 
    std::cout << "Hey\n"; 
    }; 
} 

struct ObjB : Base 
{ 
void doWork(???,???) override { std::cout << "Hello\n"; }; 
void print(???,???) override { std::cout << "Hey\n"; }; 
} 

しかし、私は???、???の種類を知りません。テンプレートと組み合わせてバーチャルを使用することはできないので、私はエレガントな方法を探しています。

これをコンパイル時に解決することは可能ですか?

+2

少なくとも1つの具体的な使用例を記載してください。今のところ(そのような例がない)、不明確なものとして閉じることになった。 –

答えて

1

。 Baseでは、渡す引数の数と可変引数を渡します。 次に、va_argを使用して実際のパラメータを取得します。

0

この質問は重複しているとマークされる可能性があります。 しかし、あなたが言ったので: "それはできないので...." と質問: "これはコンパイル時にこれを解決することは可能ですか?"

この回答を参照してください:あなたは、可変引数でこれを行うことができ

Can a C++ class member function template be virtual?

0

未知のパラメータタイプ(???)は、あなたのメソッドに有用な情報を提供するために共通のインターフェイスを共有する必要があるような臭いがあります。

これは問題を洗練された方法で解決しますが、明らかにコンパイル時ではありません。

関連する問題