c++中的宏操作符和std::字符串比较
# macro operator and std::string comparison in C++
这段代码可以帮助我将enum转换为string,反之亦然
所以我写了一个宏让它看起来更好更简单:#define SMART_REVERT_CASE(__CODE__, __STRING__)
if (__STRING__ == #__CODE__) return __CODE__
然后我这样称呼它:
enum EXAMPLE { HELLO, GOODBYE, ERROR };
EXAMPLE StringToExample(std::string const& input)
{
SMART_REVERT_CASE(HELLO, input);
SMART_REVERT_CASE(GOODBYE, input);
return ERROR;
}
不幸的是它不能编译(在VS 2008上):
Error 1 error C2666: 'operator ==' : 5 overloads have similar conversions
是否有一种方法可以提示编译器使用哪个操作符== ?
直接使用:
__STRING__.compare( #__CODE__ )
顺便说一句,使用双下划线是个坏主意。
c++ 11草案n3290将相关的operator==
定义为:
template<class charT, class traits, class Allocator>
bool operator==(const basic_string<charT,traits,Allocator>& lhs,
const charT* rhs) noexcept;
要求: rhs指向一个至少包含traits::length(rhs) + 1个charT元素的数组。
返回: lhs.compare(rhs) == 0.
所以compare
和==
在这里是一样的
你总是可以转换为string,它应该工作
#define SMART_REVERT_CASE(__CODE__, __STRING__)
if (__STRING__ == std::string(#__CODE__)) return __CODE__
请注意,我希望__STRING__
在这里是std::string
。
顺便说一句,5个超载是什么?应该有一个专门针对string
和const char*
的,不需要任何转换。
相关文章:
- 我可以重新分配/覆盖std::字符串吗
- 如何将这个std::字符串转换为std::基本字符串
- std::字符串与 PCWSTR 的对话
- 重载 std::字符串运算符+ 用于打印枚举名称
- 从std::字符串创建OssBitString
- std::字符串擦除以删除最后一个字母
- 如何使用 C++ 中的原语初始化类(如 std::字符串从 const char* 初始化)
- std::字符串串联操作
- 如何有效地将一个大std::字符串的一部分转换为float
- 转义std::字符串中的特殊字符
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- C++std::字符串流到常量字符*的转换
- 如何将std::字符串转换为不同的字符串类
- 对齐C++字符串类型问题 std::字符串到 TStr
- std::字符串到字符*而不切割字节
- 编写具有非ASCII数据的std ::字符串
- 将 Delphi 的字符串转换为 std::字符串用于C++
- std::字符串添加到字符*
- 字符* 和 std::字符串和常量字符*之间的转换
- 用指针访问std ::字符串中的元素