我想将相同的实现应用于不同的接口(interface),这似乎使其具有静态多态性:

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>HexAttribute<foo>收集到同一集合中?我还不知道我需要的所有不同类型。

通常,我看到动态多态以抽象基类的形式使用,所有HexAttribute都将派生自该基类并使用std::vector<IHexAttribute*> attributes;
但是动态多态性通常会使其适用于同一接口(interface)的不同实现,这不太适合我的情况。

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

最佳答案

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

您可以按以下方式定义十六进制:

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

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

10-08 08:48