使派生类跟随特征

时间:2018-05-15 16:04:33

标签: c++ typetraits

假设我有一个基类

class Base {};

std::is_trivial<Base>::valuetrue。有没有办法强制从Base派生的所有类也是微不足道的?

换句话说,如何修改Base以便导致编译错误?

class Derived : public Base {
    Derived() {}
};

1 个答案:

答案 0 :(得分:0)

不要写一个构造函数:

#include <iostream>
#include <type_traits>
#include <cassert> 
struct A {
    int m;
};

struct B : A{
    B() {}
};

struct C : A{
    C() = default;
};

int main() 
{
    assert( std::is_trivial<A>{});
    assert(!std::is_trivial<B>{});
    assert( std::is_trivial<C>{});
}

执行&#34;强制执行&#34;部分比较棘手,你可以设置一个约束,但使用CRTP。

#include <iostream>
#include <type_traits>
#include <cassert> 

template<class D>
struct A {
    int m;
    static void enforce(){static_assert(std::is_trivial<D>{},"");}
};

/*struct B : A<B>{
    B() {}
};*/

struct C : A<C>{
    C() = default;
};

int main() 
{
//    assert( std::is_trivial<A>{});
//    assert(!std::is_trivial<B>{});
    assert( std::is_trivial<C>{});

}