结合静态和动态多态性

时间:2014-03-19 01:39:56

标签: c++ polymorphism polymorphic-associations

我想将相同的实现应用于不同的接口,这似乎适用于静态多态:

template <typename T>
class HexAttribute
{
public:
     T* GetValue();
     void AddToValue(const T& valueToAdd);
     std::wstring* GetName();
private:
    T* value;
    std::wstring* name;
};

但是,最后我想在一个集合中将所有HexAttributes作为我的Hex类的成员结束:

class Hex
{ 
std::vector<HexAttribute*> attributes;
};

我的问题是如何收集HexAttribute<int>以及HexAttribute<float>&amp; HexAttribute<foo>进入同一个集合?我不知道我还需要的所有不同类型。

通常,我看到动态多态性以抽象基类的形式使用,所有HexAttribute都将从中派生并使用 std::vector<IHexAttribute*> attributes;

但是动态多态通常适用于同一界面的不同实现,这不适合我的情况。

这是最好的方式吗?通常当我遇到这样的困难时,我发现有一个人已经想到的更优雅和简单的解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

std::vector<HexAttribute*> attributes;无效,因为没有模板参数的HexAttribute不是类型。

您可以按如下方式定义Hex:

template <typename T>
class Hex
{ 
    std::vector<HexAttribute<T> > attributes;
};

然后我们就可以使用它:Hex<int> int_vec;或Hex<float> float_vec