有一个尝试使用通常的方式与递归扩展包:在编译时递归的最后一步扩展参数由模板参数包(值)
template<bool first> int func1(int value = 0) {
return some_func(first, value);
}
template<bool first, bool... args> int func1(int value = 0) {
return func1<args...>(some_func(first, value));
}
,FUNC1的调用是不明确的, 第一候选者是第一功能,很明显,在我的情况下,一些具体的分工:
INT FUNC1(INT)与布尔第一= FALSE]
但第二个是
int func1(int)[with bool first = false; bool ... args = {}]
你看到那也是正确的 - 第一个参数后面的空集合。 有什么想法来防止这种情况发生?
谢谢
似乎这种结构(实际上的std ::阵列不是必需的,但是从我的角度来看更有用, 的扩张可以通过使用类似C的阵列太存档)可以减少到只有一个功能使用constexpr if – amigo421