[C++]模板与std::conditional使用

文章介绍了如何使用C++标准库中的std::conditional_t来在编译时决定函数是否启用特定功能,如记录性能日志,以及如何处理编译器警告。示例展示了如何在MyFunction中通过模板参数控制Recorder的类型。
摘要由CSDN通过智能技术生成

怎么用std::conditional_t去控制是否启用某些功能

  • std::conditional 基本作用就是,当第一个非类型模板参数的值为true时,type的类型为第一个类型模板参数的类型,为false时为第二个类型模板参数的值。
  • 通过std::conditional_t 可以控制函数中的一些状态,是否记录函数的耗时或者函数的log等信息。
  • MyFunction定义了通过模板RecordLog来控制函数中Recorder的定义,因为是模板控制函数中的类型,所以需要在编译阶段确定,所以不能用MyFunction<record_log>(num); 来代替显性的true或false, 因为这个变量是运行时确定的,不是编译时确定,所以需要显性写true或false。
  • RecordLog=true时, Recorder实际上是perf_recorder::Log 类型;当为false时,是char const*类型;而且声明的这个变量可能不会被下面代码使用,所以只有定义过程,为了防止clang提示变量未使用的错误,所以加上C++17才有的maybe_unused 属性。
  • 这个std::conditional_t (C++14)相当于 typename std::conditional<boo, T, T1>::type(C++11)
template <bool RecordLog>
void MyFunction(int num) {
  using Recorder =
      std::conditional_t<RecordLog, perf_recorder::Log, char const*>;
  [[maybe_unused]] const Recorder recorder("Main::MyFunction");
  ....
}

/// how to use

void MainFunction(int num, bool record_log) {
if (record_log) {
	MyFunction<true>(num);
} else {
	MyFunction<true>(num);
}
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值