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

时间:2015-04-05 09:08:36

标签: c++

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

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

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

我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

你的宏:

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

不适合,因为它不符合宏定义。你可以这样写:

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

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

if (str == str1)

在C ++中使用宏定义是非常不推荐的。