我有两个类:A
和B
,以及从A
s到B
s的隐式转换。我也有一个vector<A>
,我想将它转换为vector<B>
。是否有可能添加一个转换,允许我隐式或明确地将vector<A>
转换为vector<B>
?转换矢量
我知道我可以使用技术described here,但有什么方法可以启用两者之间的隐式转换吗?还是明确的转换?
我有两个类:A
和B
,以及从A
s到B
s的隐式转换。我也有一个vector<A>
,我想将它转换为vector<B>
。是否有可能添加一个转换,允许我隐式或明确地将vector<A>
转换为vector<B>
?转换矢量
我知道我可以使用技术described here,但有什么方法可以启用两者之间的隐式转换吗?还是明确的转换?
通常你不应该这样做,因为vector<A>
和vector<B>
有不同的实现(特别是如果向量是像vector<bool>
这样的模板专门化)。
如果你不喜欢复制载体,采取从其他角度来看看:你需要vector<A>
将表现vector<B>
:你需要转换接口不实现。实施vector<A>
适配器与超载operator*
和operator->
这将行事像B是你所需要的。
间接地,有。这可能不是你在找什么,
但你可以有你的职责是接受
迭代器对作为参数模板:
void doSomething(const B&);
template<typename Itr>
void foo1(Itr beg, Itr end)
{
while(beg != end)
doSomething(*beg++);
}
void foo2()
{
vector<A> vec;
foo1(vec.begin(), vec.end());
}
一类,它继承了矢量< A>和继承矢量另一个类并且实现将另一个类作为参数的构造函数。
我一直希望沿着C#的行与C++的模板专业化。事情是这样的:
template<> // C++ specialization
vector<B>::operator vector<A>(this const vector<A> &vec) const // c# extension method
{
return vector<C>(vec.begin(), vec.end());
}
那么这将让我简单地状态:
vector<A> va;
vector<B> vb = va;
唉,这是不是在C++可能,所以我就增加一个全局函数:
vector<B> ConvertToB(const vector<A> &vec);
谢谢大家。
“你在这里描述”的链接给你的问题提供了一个单一的答案。你对这个答案不喜欢什么? – 2015-02-11 22:47:58
这一行让我描述*如何在我的代码中进行转换,而不仅仅是我想要进行转换。这太冗长了。 – zmbq 2015-02-11 23:04:49