使用从彼此继承的类的模板化类实例之间的隐式转换

时间:2010-08-20 16:22:25

标签: c++ oop templates inheritance

我有一个看起来像这样的课程:

class Base  
{  
    public:  
        Base( int val = 0 ) : value( val ) {};  
        int value;  
};

AB继承Base

class A : public Base {};
class B : public Base {};

我还有一个模板类,其签名类似于:

template < class T >
class Temp
{
    public:
        Temp ( const T & val = T() ) : m_T( val ) {};
        T m_T;        
};

我要做的是有一个函数,它指向Temp<Base>个实例并对它们采取行动:

void doSomething ( Temp< Base > * a, Temp< Base > * b )
{
    (*a) = (*b);
};

最后,我希望将Temp<A>Temp<B>个实例传递给doSomething(),例如:

void
main()
{
    Temp<A> a;
    Temp<B> b;
    doSomething( &a, &b) ;
};

显然,这不起作用,因为Temp<A>Temp<B>没有关联,并且类型之间没有隐式转换(即使AB是{{ 1}})。

有什么方法可以解决这个问题?任何意见都将不胜感激。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

template<typename T, typename U>
void doSomething ( Temp< T > * a, Temp< U> * b ) 
{ 
    (*a) = (*b); 
}; 

答案 1 :(得分:0)

如果你不小心,你会失去继承关系的很多用处,但是如果你使Temp派生出一个公共基类,你可以在它的派生类中创建模板化成员。您最终要做的是将A和B的公共接口移动到BASE,然后进行专业化(如何实际执行这些功能),您可以参考BASE中的TempA或TempB成员(A和B被包围编辑不会让我明确。)。