gpt4 book ai didi

c++ - 模板对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:51 25 4
gpt4 key购买 nike

我不知道如何解决模板和继承的问题。

在我的代码中有一个模板类,它看起来或多或少像:

template<typename T>
class Derived : public Base{
T value;
public:
Derived(T arg) { value=arg; };
T getValue() { return value;};
};

class Base{
};

我的基类的唯一目的是对派生类的一组对象进行分组。参数 T 通常是 double、float 或 complex,尽管 int 和 structs 也可能有用。 (稍后应该还有几个类似的派生类,带有一些附加功能。)

我可以创建这样一个群

Base** M = new Base*[numElements];

并将派生类的元素分配给它们,例如:

M[54] = new Derived<double>(100.);

但是后面怎么才能知道第55个元素的值为100呢?我需要类似的东西

virtual T getValue() = 0;

但 T 是派生类的类型名称,并且对于此数组的任何两个元素都可能不同。

最佳答案

Visitor 模式可能是您最好的选择。迭代数组的代码必须提供一个“访问者”对象,该对象知道如何处理各种类型。

struct NumericVisitor
{
virtual void visit(double) = 0;
virtual void visit(int) = 0;
virtual void visit(unsigned char) = 0;
};

struct Visitable
{
virtual void visitValue(NumericVisitor& visitor) = 0;
};

template<typename T>
class Derived : public Visitable
{
T value;
public:
Derived(const T& arg) value(arg) {}
void visitValue(NumericVisitor& visitor) { visitor.visit(value); }
};

现在您可以为要对集合执行的每个操作定义访问者,例如将每个元素转换为字符串,每种类型使用不同的格式,或者将每个元素存储到一个文件中,其中每种类型占用的空间量不同。

关于c++ - 模板对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5842766/

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