正しいクラスのメソッドを選択して実行するT型のオブジェクトを受け入れるテンプレート関数を用意したいと思います。 このような何か、入力タイプに基づいて構造体の正しいメソッドを選択する
struct TypeX
{};
struct TypeY
{};
struct X
{
void Do(TypeX &r){}
};
struct Y
{
void Do (TypeY & r){}
};
template<typename T>
void Do(T& r)
{
// if(T==TypeX) call X::Do(r)
}
そして、私の解決策は
template<class V, typename T>
void Do(T& r)
{
V::Do(r);
}
または
template<class B, typename T>
void Do(B*p, T& r)
{
p->Do(r);
}
のいずれかとなり、それは私のmain.cpp
で欠陥、例えば に見えますが、私はB
ポインタを作成する必要があります として B*p=new X;
またはB*p=new Y
と私は動的割り当てが嫌い、の入力をmain
に導入していません。私は関数のいずれかのTypeX
またはTypeY
の1つのパラメータを受け入れるだけで、X
またはY
から対応するメソッドを呼び出すために入力を区別しなければなりません。