首页 > 解决方案 > 可变参数模板函数中对重载函数的模糊调用

问题描述

我正在使用可变参数模板函数,其中函数参数不是模板类型。

我得到一个编译错误:

错误 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);
}

标签: c++c++11

解决方案


两个重载都与单个模板参数匹配,因此您必须禁用一个。例如像这样:

#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);
}

推荐阅读