私は c++ テンプレートが初めてです。2 つの異なるテンプレート クラスを操作できる一連の関数を作成しています。1 つは常に値で渡す必要があり、もう 1 つは膨大な量のデータを表すため、参照で渡す必要があります。
簡単な例を次に示します。arg に ref 型のタグが付けられている場合、関数シグネチャを const ref で取得するものとして定義する必要があります。
template<bool B, typename, typename T2>
struct if_ {};
template<typename T1, typename T2>
struct if_<true, T1, T2> {
typedef T1 type;
};
template<typename T1, typename T2>
struct if_<false, T1, T2> {
typedef T2 type;
};
struct ByvalTypeTag {};
template<typename T>
class Byval : public ByvalTypeTag
{
T somedata;
};
struct ByrefTypeTag {};
template<typename T>
class Byref : public ByrefTypeTag
{
T somedata;
};
template<typename T>
void myfunc(typename if_<std::is_base_of<ByrefTypeTag, T>::value, const T&, T>::type arg)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
Byref<int> arg;
myfunc( arg );
return 0;
}
私が得るエラーは次のとおりです。
エラー C2783: 'void myfunc(if_::value,const T&,T>::type)': 'T' のテンプレート引数を推測できませんでした
たぶん、これは間違った方法です。可能であれば、同じ機能のために書いている比較的重複したテンプレートの数を削減しようとしています。