考虑以下类:
class test {
// recursively template
template<typename T, typename... R>
void add(T t, R... r) {
// do something with t
if(sizeof...(r))
add(r...);
}
// since the variadic template add is recursive, there have to be an end.
void add() {}
public:
template<typename... T>
explicit test(T... rest) {
add(rest...);
}
};
以及以下主要内容:
int main() {
test t1(1);
test t2(1, 2);
test t3(1, 2, 3);
}
我缩小了代码,所以这些add
方法可能没有必要。
我认为这段代码不会生成运行时递归代码,而是创建了 3 个具有 3 个不同数量参数的不同构造函数。我对吗?我只是想确定我是否正确。如果不是,那会发生什么?
编辑:
bames53和Casio Neri的答案正是我所期望的。但是,它不是递归的,但它仍然调用单独的添加,就像您在 bames53 answer中看到的那样。这就像半递归。