检查模板参数是否从类继承
我想检查赋予模板的类型是否是从我的项目中的基类继承的。
它应该像下面的示例中所期望的那样工作:
template< class T : public CBaseClass >
- 是否可以使用模板来执行此操作,如果不能,我还能怎么做?
I want to check if the type given to a template is inherited from a base class in my project.
It should work like one would expect it from the following example:
template< class T : public CBaseClass >
- Is it possible to do this with templates, if not, how else can I do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
以下 Stroustrup 的示例:
在 C++0x 中,这变为:
Following an example from Stroustrup:
In C++0x, this becomes:
您可以将 Boost 中的
boost::is_base_and_driven
与BOOST_STATIC_ASSERT
结合使用。如果您使用的是支持 TR1 或 C++0x 的编译器,则标准库中存在这些构造的等效项 (std::is_base_of 和 static_assert C++0x 中的语句)。You can use
boost::is_base_and_derived
from Boost, combined withBOOST_STATIC_ASSERT
. If you are using a compiler with TR1 or C++0x support, there are equivalents of those constructs in the standard library (std::is_base_of, and the static_assert statement in C++0x).如果你想断言,就按照努尔克的方式去做。如果要检查,请使用 boost 或 C++0x 中的 is_base_of 。如果您无法使用其中任何一个,请使用 SFINAE:
If you want to assert, do it Nurk's way. If you want to check, use is_base_of from boost or C++0x. If you can't use either of those, use SFINAE:
最简单的解决方案似乎是
std::is_base_of
:您当然也可以将它与
if constexpr
结合使用:有关更多详细信息,请参阅 cppreference:
https://en.cppreference.com/w/cpp/types/is_base_of
The simplest solution seems to be
std::is_base_of
:You can of course also use it in combination with
if constexpr
:See cppreference for more details:
https://en.cppreference.com/w/cpp/types/is_base_of
越短越好:
示例 1:
示例 2:
Shorter is better:
Example 1:
Example 2: