我有兩個類: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