【问题标题】:C++ determining at compile time whether a particular operation on one or more types is validC++ 在编译时确定对一种或多种类型的特定操作是否有效
【发布时间】:2021-07-21 08:41:02
【问题描述】:

在 C++ 中,对于 C++11 及更高版本,我希望能够确定对一种或多种类型的特定操作在编译时是否有效,布尔值“true”表示该操作有效'false' 值表示操作无效。

在 Boost.TypeTraits 库中,有一些操作作为库的一部分,称为“操作符类型特征”,它可以为我确定大量操作符。我不是质疑这段代码的价值,因为它非常好。它是为在 C++03 级别上工作而编写的,但确实有一些限制。从 C++11 开始的某些 C++ 是否具有编译时支持,作为 C++ 对特定 C++ 级别的 C++ 增强的一部分?例如,给定类型 T 和类型 U,我想创建一个关于 A + B 是否是有效操作的编译时问题。我不能说decltype(T() + U()),因为如果这无效,我会得到一个编译时错误。相反,我想编写基本上说“如果decltype(T() + U())”有效的代码,则执行此操作,否则执行此操作。这可能吗?

【问题讨论】:

  • 鉴于您对 Boost.TypeTraits 有所了解,您是否有什么特别的原因不想使用has_plus<T, U>::value
  • stackoverflow.com/a/18603716/225186 用于任意语法表达,现在花哨的方式比较多,不过基本就这样了。

标签: c++ c++11 operators


【解决方案1】:

你应该看看void_t,它是在 C++14 中引入的。但是,其中没有什么不应该在 C++11 中工作。

请参阅 Walter Brown 的 excellent talk about void_t,大约 29:00 开始 (但您应该观看整个演示文稿)

【讨论】:

  • 谢谢,马歇尔! void_t 确实解决了我提出这个问题的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2021-05-14
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多