【发布时间】:2014-11-17 19:26:24
【问题描述】:
我正在对元编程和可变参数模板进行一些试验,但我遇到了一些令人困惑的行为。我已经将它简化为一个最小的工作示例,但基本上我想跟踪我正在进行多少递归调用。我想通过使第一个模板参数为整数,而第二个模板参数是可变参数列表来做到这一点。最简单的形式如下:
template<typename... List>
struct initial_call{
static const int val = next_call<0, List...>::val;
};
template<int D, typename... List>
struct next_call {
static const int val = D;
};
所以忽略这段代码毫无意义的事实,它不能在 VS2013 上编译,在 initial_call 定义的行中声明“意外类型'List”。如果没有前面的整数,它可以正常工作。那么有没有办法将可变参数模板与整数模板参数结合起来呢?
【问题讨论】:
-
对不起@cdhowie,我已经编辑了。
-
next_call应该在initial_call之前 -
将
next_call放在initial_call之前,它是works for me。 -
啊,谢谢@PiotrS。不敢相信我错过了。
-
看起来它正在将初始化程序解析为
(next_call < 0), List并在那里中断。
标签: c++ templates visual-studio-2013 variadic-templates