【发布时间】:2020-10-05 10:09:48
【问题描述】:
我正在使用可变参数模板函数,其中函数参数不是模板类型。
我得到一个编译错误:
错误 C2668 '_TailHelper':对重载函数的模糊调用
这里是代码sn-p。
template <typename HEAD>
void _TailHelper(int) {
std::cout << typeid(HEAD).name() << std::endl;
}
template <typename HEAD, typename ... TAILS>
void _TailHelper(int x) {
_TailHelper<HEAD>(x);
_TailHelper<TAILS...>(x);
}
int main(){
_TailHelper<int,double>(2);
}
【问题讨论】:
-
你忘了解释你是如何编译的,并完整引用了编译器的错误。
-
保留以
_后跟大写字母开头的名称。 -
_TailHelper<HEAD>(x);应该调用什么?你的编译器不知道,我们也不知道 -
当然是模棱两可,
_TailHelper<int>匹配两个模板,TAILS可以为空。 -
另外,请不要在
MACRO_NAMES以外的任何地方使用SHOUT,也不要使用宏。如果您想要一个使模板参数从其他名称中脱颖而出的约定,请尝试例如T_Head和T_Tails之类的,但不是ALL_CAPS。