c++ - 没有用于调用可变参数包函数的匹配函数

标签 c++ c++11 variadic-functions

考虑:

#include<tuple>

template<int N,typename... Vs,typename... Ts>
void fog( const std::tuple<Vs...>& vs , const std::tuple<Ts...> & ts )
{
}

template<typename...Vs,typename...Ts >
int gof( const std::tuple<Vs...>& vs , const std::tuple<Ts...> & ts )
{
  fog<0,Vs...,Ts...>(vs,ts);
}

int main()
{
  std::tuple<int,double> t;
  gof(t,t);
}

为什么编译器(g++-4.6)找不到fog函数,如何让它找到它?

error: no matching function for call to ‘fog(const std::tuple<int, double>&, const std::tuple<int, double>&)’
note: candidate is:
note: template<int N, class ... Vs, class ... Ts> void fog(const std::tuple<Vs ...>&, const std::tuple<_Tail ...>&)

是的,我需要完整的模板参数 N。 (这是一个简化的例子。)

最佳答案

不要展开参数包:

fog<0>(vs,ts);

否则编译器不知道哪些模板参数属于哪个元组。这样,元组的模板参数就会像往常一样被扣除。

关于c++ - 没有用于调用可变参数包函数的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831615/

相关文章:

c++ - 为什么 Qt 不支持只 move QList?

c++11 - 作为参数和返回类型的通用引用

c++ - move 语义 : invalid conversion from `type&&` to `type` . 模板:将未知参数传递给重载函数

java - 使用可变参数的方法重载

java - 为什么 NetBeans 会警告将 int[] 传递给 vararg?

c++ - 继承依赖于纯虚函数的重载函数

c++ - 如何获得队列的最小值和最大值?

c++ - 在 Linux 上使用 C++ 获取事件的 TCP/UDP 连接

c++ - 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么

c++ - 解决 VC++12 中的模板特化错误?