C++ 解析宏中定义的成员函数中的当前类型

C++ 解析宏中定义的成员函数中的当前类型,c++,macros,c++17,C++,Macros,C++17,我在宏中定义了一个成员函数,该成员只接受与当前类相同类型的参数。如何在宏中获取当前类型 我在想一些关于 #define EQUAL()bool运算符==(const decltype(*this)&b)const{return a==b.a;} 结构A{ INTA; 相等() }; 但是,此不允许在这样的顶级上下文中使用 是否有其他方法可以推断当前类型 我唯一的另一个想法是让它成为一个带有静态断言的模板,它是相同的,但感觉有点黑客味 #包括 #定义相等()\ 模板\ 布尔运算符==(常数T&b

我在宏中定义了一个成员函数,该成员只接受与当前类相同类型的参数。如何在宏中获取当前类型

我在想一些关于

#define EQUAL()bool运算符==(const decltype(*this)&b)const{return a==b.a;}
结构A{
INTA;
相等()
};
但是,
不允许在这样的顶级上下文中使用

是否有其他方法可以推断当前类型

我唯一的另一个想法是让它成为一个带有静态断言的模板,它是相同的,但感觉有点黑客味

#包括
#定义相等()\
模板\
布尔运算符==(常数T&b)常数{\
静态断言(std::is_same_v)\
返回a==b.a\
}
结构A{
INTA;
相等()
};

您可以修改模板解决方案,使其使用SFINAE而不是静态断言:

#定义相等\
模板\
自动运算符==(常量T&b)常量->标准::如果<\
std::是一样的吗\
> { \
返回a==b.a\
}
(您需要尾部返回类型,否则
不在范围内)


这样就有可能选择其他重载。

我想您必须传递类名或键入定义它。例如,
使用self=A。另请参见我不明白这有什么意义?您的成员变量已经是int,如果它不能隐式转换为int,那么当它将失败时,为什么要进行泛型比较?是否只是让整个结构模板化,或者有一些我没有考虑过的用例?