C++中常见的work around

本篇中记载了C++编程中常使用的Workaround。

限制类型特性

在concept前,C++限制类型特性常可以通过static_assert对应traits或直接上SFINAE解决,这里还列出一些特殊的情形。

  1. 创建只能在栈上的对象:在对象内重写全局的void * operator new (size_t)
  2. 创建只能在堆上的对象:禁用析构函数
  3. 在栈上new对象:使用placement new
  4. 不借助final关键字创建final对象
    实际上就是让我们不能定义出一个派生对象,我们知道将构造函数设为私有之后这个这个类就不能实例化了,不过这个就像化疗一样,虽然派生类不能实例化了,但是自己也不能实例化。
  5. 将函数的返回值加入重载决议
    注意返回值不是函数签名的一部分(所以函数重载决议也是不包括返回值的),不被推导。如果希望实现将返回值也加入重载决议类似的效果,可以借助于类型转换操作符operator T::U()实现