我之前曾问过类似的问题,了解到我可以通过部分专业化使其工作。但是为了理解可变参数模板的基础知识,我修改了这样的代码。
template<typename T, typename... args>
struct counter{
static const int value= 1+ counter<args...>::value;
};
template<typename T>
struct counter<T>{
static const int value = 0;
};
错误:“抱歉,未实现:无法将 'args ...' 扩展为固定长度的参数列表”
我知道这是错误并已在 gcc 4.7.0 中修复
所以要解决这一切,我们必须使用技巧或任何东西,这是对模板的部分特化。
template<typename... Args> struct counter;
template<>
struct counter<> {
static const int value = 0;
};
template<typename T, typename... Args>
struct counter<T, Args...> {
static const int value = 1 + counter<Args...>::value;
};
实际问题:所以我真的很想知道部分专业化在这里有什么特殊效果,这样代码才能工作,或者我应该问部分专业化如何解决这个问题?(为什么第二个版本没有遇到bug?)。任何有关动机问题和示例的解释都将非常有帮助。