C++ 在编译时确定对一种或多种类型的特定操作是否有效

问题描述

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

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

解决方法

您应该看看 void_t,它是在 C++14 中引入的。但是,其中没有任何内容不能在 C++11 中运行。

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