c++ - 可变参数模板函数中对重载函数的模糊调用
问题描述
我正在使用可变参数模板函数,其中函数参数不是模板类型。
我得到一个编译错误:
错误 C2668 '_TailHelper':对重载函数的模糊调用
这是代码片段。
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);
}
解决方案
两个重载都与单个模板参数匹配,因此您必须禁用一个。例如像这样:
#include <iostream>
#include <typeinfo>
template <typename T>
void TailHelper(int) {
std::cout << typeid(T).name() << std::endl;
}
template <typename HEAD, typename ... TAILS>
typename std::enable_if<(sizeof...(TAILS) != 0)>::type
TailHelper(int x) {
TailHelper<HEAD>(x);
TailHelper<TAILS...>(x);
}
int main() {
TailHelper<int,double>(2);
}
推荐阅读
- verilog - 我的 JK 触发器的模拟输出没有任何改变
- puppeteer - 使用 jest-circus 后 Jasmine 未定义错误
- node.js - mongodb查找(聚合)
- amazon-web-services - 了解 Kubernetes 集群扩展
- flutter - Flutter Scrollbar 防止滚动条出现在水平列表视图上
- mongodb - bson.M {} deepequal 似乎无法处理 int32
- reactjs - ReactJS console.log 在几秒钟后消失
- javascript - 在首先传播数组后向其添加新对象时数组未更新
- python - 在 python 中使用 PrettyTable 和可点击的 html 链接作为列
- azure-cosmosdb - 更改合成分区键值的最有效方法