Мне было любопытно, почему это не работает:
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
Идея в том, что мне не нужно писать две подпрограммы для ввода / вывода данных из структуры.
Вспомогательный вопрос - я бы хотел сделать "int" над параметром шаблона, но, очевидно, вы не можете выполнить частичную специализацию.Очень хотелось бы найти способ обойти это.
Заранее спасибо.