c++ - 如何在类声明中获取类的 decltype

标签 c++ c++11

有没有一种方法可以在不输入类名的情况下获取类类型(宏扩展的示例)?

我希望 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;
}

关于c++ - 如何在类声明中获取类的 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64708089/

相关文章:

c++ - 是否存在与 `std::move`相反的强制转换(或标准函数)

c++ - 如何遍历存储在 map 中的对象 vector ? C++

C++ 无效反转函数

c++ - 元编程中最后递归的问题

c++ - RVO 和 NRVO 优化 + C++11 move 运算符

c++ - 头尾打印比检查结束或开始更有效吗?

C++队列非锁定

C++:使用类型作为映射键引入模板替换错误

C++ 内存过量使用 Linux

c++ - 找到黑白图像的边缘