【发布时间】: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 用于任意语法表达,现在花哨的方式比较多,不过基本就这样了。