2015-02-11 152 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); 

謝謝大家。