#define 命名空间的标识符中带有 :: (双冒号)
#define with :: (double colon) in identifier for namespaces
如何#define
C++中带有双冒号的类型?
例如,我想包含 std 库中的 std::optional
类型。下面的代码不起作用,因为编译器无法解析 #define my_namespace::optional
中的双冒号。
#if __cplusplus >= 201703L // C++17
#include <optional>
#define my_namespace::optional std::optional
#else
#include <my_optional.h>
#define my_namespace::optional my_namespace::my_optional
#endif
// Use the optional type
my_namespace::optional<int32_t> some_value;
答案(感谢戴维斯勒(:
#if __cplusplus >= 201703L // C++17
#include <optional>
namespace my_namespace
{
template<class T>
using optional = std::optional<T>;
}
#else
#include <my_optional.h>
namespace my_namespace
{
template<class T>
using optional = my_optional<T>;
}
#endif
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- #define 命名空间的标识符中带有 :: (双冒号)
- 错误:标识符"cout"未定义。<iostream> 包含并使用命名空间 std;
- 不同文件中同一命名空间中的 2 个不同枚举中的相同标识符
- 在Boost和Qt库中有哪些命名空间标识符
- 为什么遗留C标识符不需要命名空间std
- c++中使用dllexport的命名空间和标识符
- c++命名空间/标识符问题