如何解决如何在类声明中获取类的decltype
是否有一种无需输入类名即可获取类类型的方法(例如在宏扩展上)?
我希望decltype(*this)
可以从类声明中获得,但事实并非如此。
// For example,I want declare a swap from macro expansion without passing class name on macro argument
#define SWAP_METHOD()
void swap( decltype(*this)& a1,decltype(*this)& a2 )
class A
{
SWAP_METHOD();
}
解决方法
带有模板元编程的解决方案。我认为这是最简单的解决方案。
#include <utility>
#define SWAP_METHOD() \
template <typename T> \
void swap(T& a1,T& a2)
class A {
public:
SWAP_METHOD();
};
template <>
void A::swap(A& a1,A& a2) {
std::swap(a1,a2);
}
int main() {
A a,b,c;
a.swap(b,c);
return 0;
}
,
您不知道参数的自身类型。
有几种选择,包括:
-
需要特定的typedef:
#define SWAP_METHOD() void swap( Self& a1,Self& a2 ) class A { public: using Self = A; // Require SWAP_METHOD(); };
-
使用CRTP代替MACRO
template <typename Derived>
struct Swappable
{
static void swap(Derived& d1,Derived& d2) { /*..*/}
};
struct A : Swappable<A> {};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。