我有两个类:A
and B
,以及从A
s 到B
s 的隐式转换。我也有一个vector<A>
,我想把它转换成vector<B>
. 是否可以添加一个允许我隐式或显式转换vector<A>
为的转换vector<B>
?
我知道我可以使用这里描述的技术,但是有什么方法可以实现两者之间的隐式转换吗?还是显式转换?
我有两个类:A
and B
,以及从A
s 到B
s 的隐式转换。我也有一个vector<A>
,我想把它转换成vector<B>
. 是否可以添加一个允许我隐式或显式转换vector<A>
为的转换vector<B>
?
我知道我可以使用这里描述的技术,但是有什么方法可以实现两者之间的隐式转换吗?还是显式转换?
通常你不应该这样做,因为vector<A>
并且vector<B>
有不同的实现(特别是如果 vector 是模板专业化,如vector<bool>
)。
如果您不喜欢复制向量,请从其他角度看一下:您需要它的vector<A>
行为vector<B>
:您需要转换接口而不是实现。vector<A>
为with 重载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() );
}
一个类继承vector< A >,另一个类继承vector< B > 并实现将另一个类作为参数的构造函数。
我希望在 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);
谢谢大家。