gpt4 book ai didi

c++ - # C++ 中的宏运算符和 std::string 比较

转载 作者:行者123 更新时间:2023-11-30 01:28:06 24 4
gpt4 key购买 nike

我有这段代码可以帮助我将枚举转换为字符串,反之亦然。

所以我写了一个宏让它看起来更好更简单:

#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;

Requires: rhs points to an array of at least traits::length(rhs) + 1 elements of charT.
Returns: lhs.compare(rhs) == 0.

所以 compare== 在这里是一样的。

关于c++ - # C++ 中的宏运算符和 std::string 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8007920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com