2015-02-11 113 views
1

我有两个类:AB,以及从A s到B s的隐式转换。我也有一个vector<A>,我想将它转换为vector<B>。是否有可能添加一个转换,允许我隐式或明确地将vector<A>转换为vector<B>转换矢量

我知道我可以使用技术described here,但有什么方法可以启用两者之间的隐式转换吗?还是明确的转换?

+3

“你在这里描述”的链接给你的问题提供了一个单一的答案。你对这个答案不喜欢什么? – 2015-02-11 22:47:58

+0

这一行让我描述*如何在我的代码中进行转换,而不仅仅是我想要进行转换。这太冗长了。 – zmbq 2015-02-11 23:04:49

回答

2

通常你不应该这样做,因为vector<A>vector<B>有不同的实现(特别是如果向量是像vector<bool>这样的模板专门化)。

如果你不喜欢复制载体,采取从其他角度来看看:你需要vector<A>将表现vector<B>:你需要转换接口实现。实施vector<A>适配器与超载operator*operator->这将行事像B是你所需要的。

1

间接地,有。这可能不是你在找什么,
但你可以有你的职责是接受
迭代器对作为参数模板:

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()); 
} 
1

一类,它继承了矢量< A>和继承矢量另一个类并且实现将另一个类作为参数的构造函数。

0

我一直希望沿着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); 

谢谢大家。