我想将相同的实现应用于不同的接口,这似乎适用于静态多态:
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;
但是动态多态通常适用于同一界面的不同实现,这不适合我的情况。
这是最好的方式吗?通常当我遇到这样的困难时,我发现有一个人已经想到的更优雅和简单的解决方案。有什么想法吗?
答案 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
。