【发布时间】:2011-04-26 03:37:21
【问题描述】:
我很好奇为什么这不起作用:
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”,但显然你不能进行部分特化。很想找到解决办法。
提前致谢。
【问题讨论】:
-
您能说明一下您是如何调用该函数的吗?
-
嗯,以上在 VC8 和 VC10 上对我来说很好。
-
@Georg:嗯。我不知道当它在 VC10 中“不起作用”时我在做什么......我用 OP 的 repro 再次尝试了它,它工作正常。
标签: c++ templates function specialization