我想将相同的实现应用于不同的接口(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
。