相关疑难解决方法(0)

如何在所有可变参数模板args上调用函数?

我想要做

template<typename... ArgTypes> void print(ArgTypes... Args)
{
   print(Args)...;
}
Run Code Online (Sandbox Code Playgroud)

并且它相当于这个相当庞大的递归链:

template<typename T, typename... ArgTypes> void print(const T& t, ArgTypes... Args)
{
  print(t);
  print(Args...);
}
Run Code Online (Sandbox Code Playgroud)

然后是我想要打印的每种类型的显式单参数专精.

递归实现的"问题"是生成了大量冗余代码,因为每个递归步骤都会产生一个新的N-1参数函数,而我想要的代码只会为单个N-arg print函数生成代码,并且具有最多的N专业print功能.

c++ variadic-templates c++11

43
推荐指数
3
解决办法
1万
查看次数

参数包未使用"..."展开

我有这个代码:

#include <iostream>
using namespace std;

int print(int i)
{
    cout << endl << i;
}

template<typename ...Args>
inline void pass(Args&&...args)
{

}

template<typename ...args>
inline void expand(args&&... a)
{
    print(a) ...; //this doesn't expand
    //pass( print(a)... ); this works
}

int main() {
    expand(1,2,3,4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

 In function 'void expand(args&& ...)':
error: expected ';' before '...' token
  print(a) ...;
           ^
parameter packs not expanded with '...':
  print(a) ...;
              ^
Run Code Online (Sandbox Code Playgroud)

为什么要使用这个pass()功能?

c++ variadic-functions variadic-templates c++14

12
推荐指数
2
解决办法
1万
查看次数