使派生类遵循特征
Make derived class follow trait
假设我有一个基类
class Base {};
std::is_trivial<Base>::value
是true
.有没有办法强制所有派生自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>{});
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 哪些 C 特征受C++特征的影响/派生自特征?
- 使派生类遵循特征
- 类型特征检查 CRTP 派生,在基类中,问题是未定义的类型
- 给定一个基类作为参数,如果传递了一个派生类的特征,如何使用 op<< 重载来打印派生类的特征?