微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 开始 (但您应该观看整个演示文稿)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。