忽略模板参数以提供交换功能
Posted
技术标签:
【中文标题】忽略模板参数以提供交换功能【英文标题】: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);
是否可以使用我首先描述的模板类提供交换功能?
【问题讨论】:
与你的问题无关,但我建议你阅读What are the rules about using an underscore in a C++ identifier?然后你就会知道为什么_Right
不是一个好名字。
【参考方案1】:
将swap
函数设为模板:
template<int size2, typename...DataTypes2>
void swap(ExampleClass<size2, DataTypes2...>& _right) ...
当然,将正确的参数传递给data.swap()
(你不知道)。
【讨论】:
您能详细解释一下吗?我无法实现它,对不起......编辑:对不起,只是一个小错误。现在可以使用了,谢谢! 你知道使用 std::swap 并交换整个类而不是成员变量的类似方法吗? @User19123 在与类相同的命名空间中创建一个非成员swap
函数,在其中一个参数上调用成员swap
函数?你也可以specializestd::swap
函数。以上是关于忽略模板参数以提供交换功能的主要内容,如果未能解决你的问题,请参考以下文章