【发布时间】:2019-08-04 09:40:08
【问题描述】:
我有两个课程A 和B。 B 派生自 A。现在我尝试在模板中将这些类用于第三类C,模板参数为T。此模板应将T 限制为从A 派生的所有类,不包括B 和B 的所有子类。我尝试以下方式:
template <typename T =
std::enable_if<
(std::is_base_of<A, T>::value)
&&(!std::is_base_of<B, T>::value)>::type>
class C {};
这个模板可以编译。但是如果我尝试使用它,例如使用T = int,应用程序也可以编译。所以它也被接受为正确的参数值。应该怎么做才对?
【问题讨论】:
-
显式传递模板参数时,默认值被忽略,不会出现替换失败。您需要 两个 模板参数才能使其工作。你通过了一个,SFINAE 完成了另一个。