我想在T
类模板的类型参数上放置一个 POD 类型约束A
,然后B
从令人满意的A
. 此外,B
应该根据实例的恒定性有不同的实现A
。众所周知,这样做的目的是为了在运行前更好地进行类型检查。
我能想出的只是一个暂定的定义A
template <typename T, typename POD=void>
class A;
template <typename T>
class A <T, std::enable_if<std::is_pod<T>::value>::type>
{
//blah...
};
这样 A 在传递非 POD 类型时就不能被实例化,因为您可能已经注意到部分参数化的作用就像类型切换一样。
但我不知道如何定义 B 。我认为它看起来像以下
template <typename A?>
class B;
template <>
B<const A?> : public A?
{
//blah...
};
template <>
B<A?> : public A?
{
//blah...
};
有什么绝妙的主意吗?
PS:就我个人而言,我倾向于高度批评。但是,请发布您认为无论如何都可以做到的方式。