Игнорировать аргумент шаблона для предоставления функции подкачки

Я хочу предоставить функцию подкачки для моего шаблона класса. Вот упрощенная версия:

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 ответ

Решение

Сделать swap функционировать шаблон:

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

И, конечно, передать правильный аргумент data.swap() (что вы не знаете).

Другие вопросы по тегам