假设我有一个具有以下特征的类:如何使用可变参数模板来enable_if类?
template <typename T, typename... Args>
class A;
但这类的行为应该如何取决于其他一些参数,假设它是T::value
值:
template <typename T, typename... Args, typename Enable>
class A;
template <typename T, typename... Args, typename = typename std::enable_if<T::value>::type>
class A
{
// do something
};
template <typename T, typename... Args, typename = typename std::enable_if<!T::value>::type>
class A
{
// do something else
};
int main() { return 0; }
不过,这一方案给出以下错误:
prog.cpp:6:11: error: parameter pack ‘Args’ must be at the end of the template parameter list class A;
我一直在努力寻找一个很好的信息来源,使用enable_if
选择具有可变参数模板的类。我能找到的唯一的问题是这个:
How to use std::enable_if with variadic template
但是,尽管名称,这个问题和它的答案是没有太大的帮助。如果有人可以提供或链接指导如何接近这一点,以及为什么会被赞赏。
我试图声明'A a;',但编译器一直告诉我:“未定义模板的隐式实例'细节:: A_impl '如果你能解释这一点,我会很感激的。(对不起,我还在学习这些东西)。 –
astroboylrx
2016-12-20 19:39:12
@astroboylrx为了这个工作,第一个输入'A'的模板参数列表中需要有一个'value'成员,因为'enable_if'中的检查依赖于它,您已经使用'float'而不是'value'成员,'enable_if'中的检查是无效的,所以'A_impl'的主模板(它没有实现,只声明)被选中,你会得到错误。 – jrok 2016-12-21 18:31:48
对不起,我迟到的回复。感谢您的解释。我现在看到它。 :-) – astroboylrx 2017-01-05 19:31:45