【发布时间】:2016-09-04 14:08:58
【问题描述】:
是否可以在不同类型的原始指针A*和B*之间定义自定义转换器(converter1<T>和converter2),
然后在某个类中创建所有函数(fa() 和 fb())
使用合适的转换器(converter1<T> 或 converter2)?
简而言之,我希望程序使用我的自定义函数将A* 转换为B*,反之亦然。
为了我的方便,我希望它会自动执行此操作。
class Manager{
void fb(B* b){ /** something complex */ }
void fa(A* a){ /** different thing complex */ }
void testCase(){
A* a= ... ;
fa(a);
fb(a); //automatic convert to B* using "converter2" (wish)
B* b= ... ;
fa(b); //automatic convert to A* using "converter1" (wish)
fb(b);
}
template<class T> T* converter1(B* b){ //hardcoded, non-static.
return this->getId<T>(b);
//^^^ just an example to show how custom it is,
// currently T=A
}
B* converter2(A* a){ //hardcoded
return a->getB();
//^^^ just an example to show how custom it is.
}
}
真实案例有很多A-A1、A2、A3等。A和B不是相互派生的。
我希望有办法。我想到了指针的构造函数。
【问题讨论】:
-
A 和 B 是相互派生的吗?
-
不,它们不是相关的类。谢谢,我忘记了,我会添加到问题中。
-
简答:不,这是不可能的。
-
但是它们可以通过指针转换??
-
通过指针转换将一种不相关的类型转换为另一种是未定义的行为。