gpt4 book ai didi

c++ - C++ 中的模板断言?

转载 作者:太空宇宙 更新时间:2023-11-04 15:10:38 28 4
gpt4 key购买 nike

有没有办法定义模板

assertInheritsFrom<A, B>

这样

assertsInheritsFrom<A, B>

编译当且仅当

class A : public B { ... } // struct A is okay too

谢谢!

最佳答案

将静态断言与 is_base_of<Base,Derived> 相结合来自 Boost.TypeTraits:

BOOST_STATIC_ASSERT(boost::is_base_of<B, A>::value);

一个天真的实现(不考虑整数类型、私有(private)基类和歧义)可能如下所示:

template<class B, class D>
struct is_base_of {
static yes test(const B&); // will be chosen if B is base of D
static no test(...); // will be chosen otherwise
static const D& helper();
static const bool value =
sizeof(test(helper())) == sizeof(yes);
// true if test(const B&) was chosen
};

关于c++ - C++ 中的模板断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152359/

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