【发布时间】:2011-03-11 15:40:25
【问题描述】:
如何强制模板参数T 成为特定类Baseclass 的子类?
像这样的:
template <class T : Baseclass> void function(){
T *object = new T();
}
【问题讨论】:
-
你这样做是为了达到什么目的?
-
我只是想确保 T 实际上是子类的实例或类本身。我提供的函数内的代码几乎无关紧要。
-
相反,它非常相关。它决定了在该测试中投入工作是否是一个好主意。在许多(所有?)情况下,绝对不需要自己强制执行此类约束,而是让编译器在实例化时执行。例如,对于接受的答案,最好检查
T是否派生自Baseclass。到目前为止,该检查是隐式的,并且对重载决议不可见。但是,如果在任何地方都没有进行这种隐式约束,那么似乎没有理由进行人为限制。 -
是的,我同意。但是,我只是想知道是否有办法做到这一点:) 但是,当然,您的观点非常有效,感谢您的洞察力。