gpt4 book ai didi

c++ - 结合静态和动态多态性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:19 24 4
gpt4 key购买 nike

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

关于c++ - 结合静态和动态多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com