なぜこれが機能しないのか興味がありました:
const int ASSIGN_LEFT = 1;
const int ASSIGN_RIGHT = 2;
template <int AssignDirection>
void map( int& value1, int& value2 );
template<>
void map<ASSIGN_LEFT>( int& value1, int& value2 )
{ value1 = value2; }
template<>
void map<ASSIGN_RIGHT>( int& value1, int& value2 )
{ value2 = value1; }
この関数を使おうとすると、最初に定義したテンプレートの特殊化が呼び出されます。したがって、特殊化の順序を逆にしない限り、上記のコードを呼び出しますmap<ASSIGN_RIGHT>
。そうしないと、常に。が呼び出されます。map<ASSIGN_LEFT>
map<ASSIGN_RIGHT>
int main()
{
int dog = 3;
int cat = 4;
map<ASSIGN_RIGHT>( dog, cat );
std::cout << "dog= " << dog << ", cat= " << cat << std::endl;
}
出力は
dog= 4, cat= 4
これは、構造体からデータを入出力するために2つのルーチンを作成する必要がないようにするためです。
補助的な質問-テンプレートパラメータの上に「int」を作成したいのですが、明らかに部分的な特殊化を行うことはできません。それを回避する方法を見つけたいと思います。
前もって感謝します。