私は私の関数テンプレートに次の問題があります。私はこのような関数テンプレートを使用している場合は、どこT
はどちらかClassA
またはClassB
のものとすることができる。非テンプレート関数にパラメータとしてテンプレート型を渡すには?
template<typename T, bool flag>
void function(T& someT){
if(flag){ /*If 'flag' is true, 'someT' MUST be of type ClassA*/
nonTemplateFunction1(someT);
}
else{ /*Else 'someT' must be of type ClassB*/
nonTemplateFunction2(someT);
}
}
そして、いくつかの他のファイルに私が
void nonTemplateFunction1(ClassA& a){...}
を持っており、さらに別のファイルに私は
を持っていますvoid nonTemplateFunction2(ClassB& b){...}
私の関数テンプレートを呼び出すと、コンパイル時にエラーが発生します。
error: no matching member function for call to 'nonTemplateFunction2'
コンパイラがnonTemplateFunction2
の呼び出しをパラメータとしてテストするのは、たとえば、ClassA
と考えられます。しかし、これは決して起こり得ません(少なくとも私は、プログラマ、これを世話します)。私のプログラムをコンパイルするにはどうすればいいですか?可能な解決策は何ですか?
EDIT:より正確なエラー:
./tabledata.hh:371:9: error: no matching member function for call to 'bulk_insert' bi.bulk_insert(bl, aRel_Vec[j]);
../pax/bulk_insert_pax.hh:21:8: note: candidate function not viable: no known conversion from 'value_type' (aka 'NSM_Relation') to 'PAX_Relation &' for 2nd argument void bulk_insert(const BulkLoader& aBulkLoader, PAX_Relation& aRelation);
フム、私は合格しなければならないように見えます私のTへのポインタ。私のお気に入りのソリューションではありませんが、それは動作するはずです –
@ N.Weber私はそれが最速のオプションだと思う、はい。 –