【发布时间】:2012-10-26 23:16:11
【问题描述】:
我对 std::enable_if 很陌生,想知道如何使用它。 我有一个模板类:
template<int a, int b>
class foo {
}
现在我只想在 a + b 等于 10 时实例化它。 我可以使用 std::enable_if 来实现吗?
第二个问题: 如果我在 foo 类中有成员
template<int a, int b>
class foo {
int c;
}
我只想有c的时候
a = 5.
如何使用 std::enable_if 做到这一点? 这是使用 std::enable_if 的正确案例吗?
【问题讨论】:
-
这不是
enable_if的用途。它仅适用于 function 模板中的 deduced 类型。 -
@KerrekSB:或者禁用类模板的特化。长期以来,两者都是
boost::enable_if的核心用法,并且仍然是有效的用例。请注意,这通常是在基础模板的多个专业化的上下文中完成的,以选择一个而不是其他模板,而不是完全禁用一个模板。 -
@DavidRodríguez-dribeas:这是一个很好的观点。到目前为止,我还没有将它用于类模板专业化......
-
更简单:
template<int a> class foo { static const int b = 10 - a;