Игнорировать аргумент шаблона для предоставления функции подкачки
Я хочу предоставить функцию подкачки для моего шаблона класса. Вот упрощенная версия:
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()
(что вы не знаете).