C++奇淫技巧
包含平时开发用到的一些技巧,不鬼斧神工
BugattiEngine
这个作者很懒,什么都没留下…
展开
-
operator[] 运算符返回引用和返回值得不同const修饰
对于返回值的,一般作为右值进行获取,所以这个过程中应该是不变动内部的值对于返回引用的,一般作为左值进行赋值,所以不能采用const修饰float operator[] (const size_t i) const{ return *(&x+i);}float& operator[] (const size_t i){ return *(&x+i);}...原创 2018-12-03 15:46:51 · 532 阅读 · 1 评论 -
不设置静态变量判断一个静态类是否已经初始化
不用静态变量的话可以增加代码的简洁度,采用静态函数代替,由于返回的是引用,所以该函数可以直接赋值,isStartedUp()=true;其次由于静态变量在函数块内部只初始化一次并存在,所以可以一直使用/** Checks has the Module been started up. */static bool& isStartedUp(){ static bool inst =...原创 2018-12-03 10:20:22 · 352 阅读 · 0 评论 -
限制一个类只可以在栈或者堆上创建
//只可以在栈上创建 ,删除 new 重载方法void * operator new(size_t Size) = delete;//只在堆上 ,删除默认构造和析构函数class heaponly {private: heaponly(); ~heaponly(); };...原创 2018-11-28 17:56:15 · 108 阅读 · 0 评论 -
std::variant代替union
std::variant<int, double, std::wstring> var1{ 1.0 };std::variant<int, double, std::wstring> var2{ L"2" };std::variant<int, std::wstring> var3{ 3 };//assignvar2 = L"abc";var1 = ...原创 2018-11-27 13:44:16 · 1089 阅读 · 0 评论 -
std::lock_guard对整个函数加锁访问
std::lock_guard<std::mutex> lock(mutex_);性能优化是最小使用原则,那么将需要使用的代码块单独拿出来作为函数mutex_将会自动release 当超出作用范围的时候。lock_guard 对象的拷贝构造和移动构造(move construction)均被禁用,因此 lock_guard 对象不可被拷贝构造或移动构造。void safe_in...原创 2018-11-27 13:41:20 · 989 阅读 · 0 评论 -
std::enable_if<bool>::type 限定模板传递的类型
类似于C#中可以指定泛型的父类,在C++编译期间强行报错通过enable_if 实现如果std::is_arithmetic::value ||std::is_convertible<T, string>::value的值为false,则会提示type 找不到,进而无法通过编译struct Initializer { template <typename T, ty...原创 2018-11-27 13:37:46 · 1445 阅读 · 0 评论 -
偏特化模板
std::is_integral 实现原理 // TEMPLATE CLASS _Is_integraltemplate<class _Ty> struct _Is_integral : false_type { // determine whether _Ty is integral };//有偏特化版本的类型继承的是true_type,即std::bool_co...原创 2018-11-27 13:32:39 · 270 阅读 · 0 评论 -
添加Tags决定构造函数的分发
这个是从TensorFlow的源码中看到的用于区分同参数下不同类型的构造函数通过添加一个class ,里面添加不同的enum class 实现编译期间自动选择合适的构造 struct Tags { enum class ScopeName; enum class OpName; enum class ControlDeps; enum class Device;...原创 2018-11-27 13:28:07 · 118 阅读 · 0 评论 -
std::bind 函数参数绑定
std::bind 可以将一个多参数的函数转化为一个少参数 或者无参数函数,上面的bind之后变为func(int value,1,5),函数签名是bool (int)了 而非 bool(int,int,int)1.如果需要把一个类中的函数转换为全局函数签名,则std::bind(func,this);2.静态函数可以直接绑定bool fun(int value, int min, int ...原创 2018-11-27 13:25:13 · 2826 阅读 · 0 评论