我有一个混合的 C++14/C++17 代码库,并且我isEmpty只想在手头有一个函数时启用该函数std::optional。所以,我尝试了 SFINAE:
template <typename T, typename int_<decltype(std::nullopt)>::type = 0>
inline bool isEmpty(const std::optional<T>& v) {
return !v;
}
Run Code Online (Sandbox Code Playgroud)
然而,这是行不通的。
isEmpty如果std::optional存在的话如何进行条件编译?
如果您的编译器足够新(例如 GCC >= 9.1 或 Clang >= 9.0.0),您可以包含头文件<version>并在定义了宏的情况下有条件地编译函数模板__cpp_lib_optional:
#include <version> // provides, among others, __cpp_lib_optional
#ifdef __cpp_lib_optional
template <typename T>
inline bool isEmpty(const std::optional<T>& v) {
return !v;
}
#endif
Run Code Online (Sandbox Code Playgroud)
这样,isEmpty只有在您处于模式(或更高模式)时才会编译-std=c++17。
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |