我想扩展std::string并添加“等于”。
所以我做了以下事情:

#define Equals(str1) compare(str1) == 0

并使用以下代码:
if ( str.Equals("hhhhllll") )

我假设编译为
if ( str.compare("hhhhllll") == 0 )

一切编译都很棒。

现在我想改善我的宏,添加括号以进行编译
if ( (str.compare("hhhhllll") == 0) )

我已经尝试过类似的东西:
    #define (str).Equals(str1) (str.compare(str1) == 0)

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

我该如何实现呢?

最佳答案

您的宏:

#define (str).Equals(str1) (str.compare(str1) == 0)

不适合,因为它与宏定义不符。您可以这样写:
#define Equals(str, str1) (str.compare(str1) == 0)

但没有必要。可以将所有std::string实例与重载的operatror==进行比较。
这样您就可以编写以下代码:
if (str == str1)

不建议在C++中使用宏定义。

关于c++ - 是否可以像在C#中那样使用C++中的宏来创建 "extension methods"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29455770/

10-11 15:11
查看更多