我正在尝试学习可变参数模板和函数.我无法理解为什么这段代码不能编译:
template<typename T>
static void bar(T t) {}
template<typename... Args>
static void foo2(Args... args)
{
(bar(args)...);
}
int main()
{
foo2(1, 2, 3, "3");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它失败时出现错误:
错误C3520:'args':必须在此上下文中扩展参数包
(在功能上foo2).
if constexpr()和之间有什么区别if()?
我何时何地可以同时使用它们?
我有一组非正交的策略,它们都实现了一个通用的命名方法,策略添加了安全检查.我希望用户能够组合策略以允许更复杂的验证,而无需手动为每个组合案例创建策略.我的方法是创建一个新的策略类来组合其他人.
下面的简化示例将C显示为组合类,此处将方法ID组合在一起.当在C上调用id时,预期的结果是顺序调用每个基类的id.
#include <iostream>
using namespace std;
struct A
{
void id() { cout << "A ";}
};
struct B
{
void id() { cout << "B ";}
};
template<class A, class... As>
struct C : public A, public As...
{
void id()
{
A::id();
As...::id(); // This line does not work, it is illustrative.
}
};
int main()
{
C<A, B> c;
c.id();
//expected: result A B
}
Run Code Online (Sandbox Code Playgroud)
问题是:是否有可能扩展为...以某种方式这样做而不使用递归方法,只使用...运算符?