【发布时间】:2009-11-14 15:28:00
【问题描述】:
我是泛型类编程的新手,所以我的问题可能很愚蠢 - 很抱歉。我想知道以下事情是否可行,如果可以,该怎么做
我有一个简单的泛型类 Provider,它提供泛型类型的值:
template <class A_Type> class Provider{
public:
A_Type getValue();
void setSubProvider(ISubProvider* subProvider)
private:
A_Type m_value;
ISubProvider* m_subProvider;
};
如果 m_subProvider 为 NULL,getValue 函数应返回 m_value。但如果 SubProvider 不为 Null,则该值由 SubProvider 类计算。
所以 subprovider 也必须是泛型类型,但我将其创建为没有实现的抽象类:
template <class A_Type> class ISubProvider{
public:
virtual A_Type getValue() = 0;
};
现在我希望 ISubProvider 的实际实现是非泛型的!例如,我想实现返回 Integer 类型的 IntegerProvider
class IntegerProvider : public ISubProvider{
int getValue(){return 123;}
};
也许是一个 StringProvider:
class StringProvider : public ISubProvider{
string getValue(){return "asdf";}
};
现在 - 我如何编码整个事情,以便我可以使用
void setSubProvider(ISubProvider* subProvider)
Provider 类的功能只有与 Provider 的泛型类型对应的 subprovider 吗?
例如,如果我实例化一个 int 类型的提供者:
Provider<int> myProvider = new Provider<int>();
那么应该可以调用
myProvider.setSubProvider(new IntegerProvider());
但一定不能调用
myProvider.setSubProvider(new StringProvider());
我希望你能理解我的问题并告诉我如何正确地创建代码:)
谢谢!
【问题讨论】:
标签: c++ inheritance function generics