我想扩展std :: string并添加"equals".所以我做了以下事情:
#define Equals(str1) compare(str1) == 0
Run Code Online (Sandbox Code Playgroud)
并使用以下代码:
if ( str.Equals("hhhhllll") )
Run Code Online (Sandbox Code Playgroud)
其中(我假设)编译
if ( str.compare("hhhhllll") == 0 )
Run Code Online (Sandbox Code Playgroud)
一切都很好.
现在我想改进我的宏,添加括号来编译
if ( (str.compare("hhhhllll") == 0) )
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
#define (str).Equals(str1) (str.compare(str1) == 0)
Run Code Online (Sandbox Code Playgroud)
但它不会编译(宏根本不适合)
我怎样才能实现它?
你的宏:
#define (str).Equals(str1) (str.compare(str1) == 0)
Run Code Online (Sandbox Code Playgroud)
不适合,因为它不符合宏定义。你可以这样写:
#define Equals(str, str1) (str.compare(str1) == 0)
Run Code Online (Sandbox Code Playgroud)
但没有必要。所有std::string
实例都可以与重载的进行比较operatror==
。
这样你就可以编写以下代码:
if (str == str1)
Run Code Online (Sandbox Code Playgroud)
强烈不建议在 C++ 中使用宏定义。