gpt4 book ai didi

c++ - 使派生类遵循特征

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

假设我有一个基类

class Base {};

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

换句话说,我该如何修改Base从而导致编译错误?

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

最佳答案

干脆不要写构造函数:

#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>{});
}

执行“执行”部分比较棘手,您可以使用 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>{});

}

关于c++ - 使派生类遵循特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354687/

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