忽略模板参数以提供交换功能

时间:2018-01-28 16:54:24

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

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

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);

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

1 个答案:

答案 0 :(得分:2)

swap功能设为模板:

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

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