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++ - 如何为此Boost.Build Jamfile编写Bazel BUILD文件?

c++ - 为 freebsd 11 : error: unknown type name 'choke' 编译 gcc4.8.5 时出错

python - 为什么我可以在 Mac OS X 上使用 Cython 编译为 C 但不能编译为 C++

迭代器的 C++ 模板特化

c++ - Python:获取两个大写字母之间的字符串

c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值

c++ - 可变参数函数是否已弃用?

c - 如何在另一个函数中嵌套 fprintf

c - 我正在尝试创建自己的 printf 函数,但我不知道如何包含格式说明符

java - 在这种情况下,我如何处理 Function<T, R> 和省略号/可变参数?