加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 公共继承的静态断言

发布时间:2020-12-16 05:35:00 所属栏目:百科 来源:网络整理
导读:我创建了一个帮助类,通过模板构建一个自定义类,这个自定义类必须从某个类继承,我可以使用std :: is_base_of来检查它. 但是,我还需要检查一下这个继承是否公开,这怎么可以实现呢? 作为参考,这里是一个剥离版本的类,我有std :: is_base_of在那里. templatecla
我创建了一个帮助类,通过模板构建一个自定义类,这个自定义类必须从某个类继承,我可以使用std :: is_base_of来检查它.

但是,我还需要检查一下这个继承是否公开,这怎么可以实现呢?

作为参考,这里是一个剥离版本的类,我有std :: is_base_of在那里.

template<class CustomSink>
class Sink
{
    static_assert(std::is_base_of<BaseSink,CustomSink>::value,"CustomSink must derive from BaseSink");
    //Some static assert here to check if custom sink has publicly inherited BaseSink 
    //static_assert(is_public.....
public:
    template<class... Args>
    Sink(Args&&... args)
    {
    }
    ~Sink()
    {
    }       
};

解决方法

据我所知,公共继承是唯一可以执行隐式指针转换的情况(通过重载运算符可以实现参考转换).
template <class T>
std::true_type is_public_base_of_impl(T*);

template <class T>
std::false_type is_public_base_of_impl(...);

template <class B,class D>
using is_public_base_of = decltype(is_public_base_of_impl<B>(std::declval<D*>()));

See it live on Coliru

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读