是否可以像在 C# 中使用宏创建"extension methods" C++?

Is it possible to create "extension methods" like in C#, using macro in C++ ?

本文关键字:创建 extension methods C++ 是否      更新时间:2023-10-16

我想扩展std::字符串并添加"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)

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

我怎样才能做到这一点?

您的宏:

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

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

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

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

if (str == str1)

在C++中使用宏定义是非常不受欢迎的。