当前位置: 首页 > wzjs >正文

最经济 网站建设怎么样才能引流客人进店

最经济 网站建设,怎么样才能引流客人进店,酒泉网站建设公司,小程序怎么做优惠券网站文章目录 C之type_traitsis_floating_point<T> ..的使用std::enable_if<T>::type的使用std::remove_cv 如何自定义traits C之type_traits is_floating_point …的使用 一般在定义打印模板函数的时候&#xff0c;当我们用printf进行终端日志打印&#xff0c;需要根…

文章目录

  • C++之type_traits
    • is_floating_point<T> ..的使用
    • std::enable_if<T>::type的使用
    • std::remove_cv
  • 如何自定义traits

C++之type_traits

is_floating_point …的使用

  • 一般在定义打印模板函数的时候,当我们用printf进行终端日志打印,需要根据打印的类型来设置flag,所以这个时候判断数据类型就很必要了, 我们可以根据is_same,is_float_point, is_integral等来确定类型情况。可以参考cuda打印实例
 std::is_floating_point<yourtype>::value;std::is_same<type1, type2>::value;
  • 这些is_xxx的函数,如何定义的; 有什么可以学习的点

std::enable_if::type的使用

  • c++的原则就替换失败并非错误(SFINAE)。std::enable_if 就是满足条件时类型是有效的
  • 所谓的SFINAE规则就是在编译时进行查找替换,对于重载的函数,如果能够找到合适的就会替换,如果第一个不合适并不会报错,而会使用下一个替换直到最后一个,如果都不满足要求,那么才会报错。出现二义性的话也会报错。
  • 主要两个应用
  • 类型判断,可以自定义类型判断
//判断类型
template <typename _Tp>
struct Smart_pointer : public false_type {};template <typename _Tp>
struct Smart_pointer<std::weak_ptr<_Tp>> : public true_type {};template <typename _Tp>
struct Smart_pointer<std::shared_ptr<_Tp>> : public true_type {};template <typename _Tp>
struct is_smart_pointer : public Smart_pointer<typename std::remove_cv<_Tp>::type>{};template <typename _Tp>
typename enable_if<is_smart_pointer<_Tp>::value,void>::type check(_Tp p){std::cout << "is smart pointer" << std::endl;
}
template <typename _Tp>
typename enable_if<!is_smart_pointer<_Tp>::value,void>::type check(_Tp p){std::cout << "not smart pointer" << std::endl;
}
void test_enable_if(){int *p = new int(3);std::shared_ptr<int> sp = std::make_shared<int>(3);check(sp);check(p);delete p;
}
  • 返回值指定,根据输入类型判断返回值
template <typename _Tp>typename enable_if<std::is_integral<_Tp>::value,bool>::type is_odd(_Tp i){return i&0x1;}void test_is_odd(){std::cout << std::boolalpha << is_odd(10) << std::endl;}
  • Apollo开源代码中的一个实例; 利用C++的SFINAE原则,实现在类的继承过程中,上层类中定义一个必执行的函数,里面调用子类可能实现可能不实现的具体函数,这个时候就用到了这个特性,通过模板推导机制,实现子类定义这个具体操作时,这个必执行的函数会调用这个具体操作,当没有定义是,就按照这个必执行函数的默认操作去执行。

  • Apollo 开源代码示例分析-HasShutdown

#include <type_traits>
#include <utility>// apollo: cyber/base/macros.h
#define DEFINE_TYPE_TRAIT(name, func)                     \template <typename T>                                   \struct name {                                           \template <typename Class>                             \static constexpr bool Test(decltype(&Class::func)*) { \return true;                                        \}                                                     \template <typename>                                   \static constexpr bool Test(...) {                     \return false;                                       \}                                                     \\static constexpr bool value = Test<T>(nullptr);       \};                                                      \\template <typename T>                                   \constexpr bool name<T>::value;// apollo: cyber/common/macros.h
/**
template <typename T>
struct HasShutdown {template <typename Class>static constexpr bool Test(decltype(&Class::Shutdown)*) {return true;}template <typename>static constexpr bool T(...) {return false;}static constexpr bool value = Test<T>(nullptr);
};
template <typename T>
constexpr bool HasShutdown<T>::value;*/
DEFINE_TYPE_TRAIT(HasShutdown, Shutdown)template <typename T>
typename std::enable_if<HasShutdown<T>::value>::type CallShutdown(T *instance) {instance->Shutdown();
}template <typename T>
typename std::enable_if<!HasShutdown<T>::value>::type CallShutdown(T *instance) {(void)instance; // 可以自定义任何默认的动作。
}/** 分析
1. 当instance实例的类中有Shudown时,第一个模板中HasShutdown<T>::value是true,则enable_if<true>::type是合法的;则第一个模板函数被匹配;而此时!HasShutdown<T>::value是false,则第二个模板函数匹配有问题,所以根据C++的SFINAE原则,则第一个被推导出来;所以当调用CallShutdown时,第一个函数被调用,而其有会调用instance中的shutdown函数。
3. 反之,当instance中没有shutDown,则第一个的HasShutdown<T>::value是false,则std::enable_if<HasShutdown<T>::value>::type非法,所以第一个模板不能被推导出来,而第二个模板被推导出来,所以当调用CallShutdown时,第二个函数形式被调用;从而这就实现了,当有Shutdown的时候调用自己定义的,否则不做任何事情。
*/// 下面是CallShutdown被使用时的场景, 通过在一个单例中cleanup里调用,来实现用户定制或不定制的情况。
#define DECLARE_SINGLETON(classname)                                      \public:                                                                  \static classname *Instance(bool create_if_needed = true) {              \static classname *instance = nullptr;                                 \if (!instance && create_if_needed) {                                  \static std::once_flag flag;                                         \std::call_once(flag,                                                \[&] { instance = new (std::nothrow) classname(); }); \}                                                                     \return instance;                                                      \}                                                                       \\static void CleanUp() {                                                 \auto instance = Instance(false);                                      \if (instance != nullptr) {                                            \CallShutdown(instance);                                             \}                                                                     \}                                                                       \\private:                                                                 \classname();                                                            \DISALLOW_COPY_AND_ASSIGN(classname)

std::remove_cv

  • 去掉变量的const, volatile属性,获取其原始类型信息。

实现方式

  • 模版推导丢弃const和volatile参数。

性能开销

  • 模版推导完成操作,不涉及运行时开销。

调用stl

  • remove_const
  • remove_volatile

作者:i_need_job
链接:https://www.jianshu.com/p/a771299d3a89
来源:简书

如何自定义traits

http://www.dtcms.com/wzjs/212672.html

相关文章:

  • video.js wordpress搜索关键词排名优化服务
  • 站群系统开发关键词排名是什么意思
  • 湖州网站建设策划推广产品的渠道
  • 免费设计软件网站公司网站建设服务机构
  • 专做展厅设计网站网络运营怎么做
  • 网站的用户注册怎么做怎么搭建属于自己的网站
  • 晋中北京网站建设深圳网络推广渠道
  • 哪些网站可以做设计方案广州百度seo公司
  • 网站建设招聘要求网站有吗免费的
  • 颍州网站建设竞价网络推广
  • 云服务器和网站空间谷歌推广公司
  • 仙桃做网站的个人seo还有前景吗
  • 网站建设 系统维护郑州网站推广培训
  • 公司微网站怎么建设百度推广登录入口官网网址
  • 新品发布会活动方案免费seo
  • 宜昌网站制作公司网络营销研究现状文献综述
  • 制作视频网站违法吗简述seo的概念
  • 如何做简单的网站招聘网络营销推广人员
  • 网站建设方案书制作流程宝安网站建设
  • 在线网站建设者西安外包公司排行
  • 临猗县 保障住房和建设住建网站快速关键词排名首页
  • 手机高端网站建设推广竞价账户托管
  • 帝国cms做下载网站爱站网站长seo综合查询工具
  • wordpress密码访问插件seo快速排名优化方式
  • wordpress导出网站下载优化大师app
  • 屏蔽蜘蛛网站还会被收录吗今日小说排行榜风云榜
  • 成都电子商务平台网站制作报价苏州关键词排名提升
  • 海口商城网站建设线上引流线下推广方案
  • 网站建设柳市建立网站的流程
  • 济南济南网站建设怎么在网上做广告