【问题标题】:Ignore template argument to provide swap function忽略模板参数以提供交换功能
【发布时间】:2018-01-28 16:54:23
【问题描述】:

我想为我的模板类提供一个交换功能。这是一个简化版:

template <int size, typename...DataTypes>
class ExampleClass
{
public:
   ExampleClass() : data(size) {}
   void swap(ExampleClass& _Right)
   {
      data.swap(_Right);
   }


protected:
   std::vector<std::tuple<Types...>> data;
}

在这种情况下交换功能不起作用:

ExampleClass<1,int,float> ec1;
ExampleClass<2,int,float> ec2;
ec1.swap(ec2);

如果我在不使用此类的情况下交换这些元组向量,它可以工作:

std::vector<std::tuple<int, float> data1(2);
std::vector<std::tuple<int, float> data2(3);
data1.swap(data2);

是否可以使用我首先描述的模板类提供交换功能?

【问题讨论】:

标签: c++ c++11 variadic-templates swap template-classes


【解决方案1】:

swap 函数设为模板:

template<int size2, typename...DataTypes2>
void swap(ExampleClass<size2, DataTypes2...>& _right) { ... }

当然,将正确的参数传递给data.swap()(你不知道)。

【讨论】:

  • 您能详细解释一下吗?我无法实现它,对不起......编辑:对不起,只是一个小错误。现在可以使用了,谢谢!
  • 你知道使用 std::swap 并交换整个类而不是成员变量的类似方法吗?
  • @User19123 在与类相同的命名空间中创建一个非成员swap 函数,在其中一个参数上调用成员swap 函数?你也可以specializestd::swap函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多