我是新来的泛型类编程,所以也许我的问题是愚蠢的 - 对不起。我想知道以后的事是否是可能的 - 如果是这样,该怎么办呢C++泛型类和继承
我有一个简单的泛型类供应商,它提供了泛型类型的值:
template <class A_Type> class Provider{
public:
A_Type getValue();
void setSubProvider(ISubProvider* subProvider)
private:
A_Type m_value;
ISubProvider* m_subProvider;
};
的的getValue函数在m_subProvider为NULL的情况下应返回m_value。但是,如果SubProvider不是Null,则该值应由SubProvider类计算。
所以subprovider必须是通用型的,但我却创造它作为一个抽象类没有实现:
template <class A_Type> class ISubProvider{
public:
virtual A_Type getValue() = 0;
};
现在我想ISubProvider的实际实现作为非通用!比如我要实现IntegerProvider返回整数类型
class IntegerProvider : public ISubProvider{
int getValue(){return 123;}
};
,也许StringProvider:
class StringProvider : public ISubProvider{
string getValue(){return "asdf";}
};
现在
- 我怎么可以编写整个事情,这样我可以使用
void setSubProvider(ISubProvider* subProvider)
类的提供者的功能仅与提供者的通用类型对应的子提供者有关吗?
例如,如果我实例化一个int类型的供应商:
Provider<int> myProvider = new Provider<int>();
那么它必须能够调用
myProvider.setSubProvider(new IntegerProvider());
,但它必须是不可能打电话
myProvider.setSubProvider(new StringProvider());
我希望你明白我的问题,并可以告诉我如何正确创建该代码:)
谢谢!