是否可以使用C++中的宏创建像C#中的"扩展方法"?

Oop*_*ser 9 c++

我想扩展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)

但它不会编译(宏根本不适合)

我怎样才能实现它?

agn*_*nor 2

你的宏:

#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++ 中使用宏定义。