gpt4 book ai didi

c++ - 如何在编译时验证模板类是从给定类派生的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:20 26 4
gpt4 key购买 nike

我想知道,是否有任何优雅的方法(如 this )来检查模板参数是否派生自给定的类?一般而言:

template<class A, class B>
class MyClass
{
// shold give the compilation error if B is not derived from A
// but should work if B inherits from A as private
}

另一个question中提供的解决方案仅当 B 作为公共(public)继承自 A 时才有效:

class B: public A

然而,我宁愿没有这样的约束:

class A{};
class B : public A{};
class C : private A{};
class D;
MyClass<A,B> // works now
MyClass<A,C> // should be OK
MyClass<A,D> // only here I need a compile error

提前致谢!!!

最佳答案

你可以像我在这里说的那样尝试: C++: specifying a base class for a template parameter在静态断言中(C++0x 或 BOOST_STATIC_ASSERT)

template<class A, class B> 
class MyClass
{
static_assert( boost::is_base_of<A,B>::value );
}

关于c++ - 如何在编译时验证模板类是从给定类派生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com