【发布时间】:2011-12-11 01:54:17
【问题描述】:
假设我有一个如下定义的类,例如Value。
template <typename T>
class Value : public ValueInterface
{
public:
// ...
T getValue() const;
private:
T value_;
}
我是否可以在我的代码中泛指多个不同类型的Values(即具有不同的T 类型)(例如,创建一个容器)?我的第一个想法是是否有可能以某种方式声明一个纯抽象类,Value 可以从中继承:
class ValueInterface
{
public:
?? getValue() const = 0;
}
template <typename T>
class Value : public ValueInterface
{
// ...
}
std::list<ValueInterface> lst;
Value<int> i(...);
Value<char> c(...);
lst.push_back(i);
lst.push_back(c);
int vi = i.getValue();
char vc = c.getValue();
如果不可能,您能否提供替代解决方案?
【问题讨论】:
-
您能否给出一个伪代码示例来说明您希望如何使用此类功能?
-
就在那儿,在第二个 sn-p 中。我需要声明一个
std::list来保存不同的Values。 -
但这与您的
getValue方法有什么关系? -
在您的示例中,您没有以多态方式使用
getValue方法,所以我不确定您为什么要声明它virtual。我也看不出这与容器有什么关系。 -
您可能会发现
boost::any库很有用。
标签: c++ templates interface polymorphism