gpt4 book ai didi

c++ - 如何制作抽象模板类的 vector

转载 作者:行者123 更新时间:2023-11-30 01:21:48 26 4
gpt4 key购买 nike

以下不起作用:

std::vector<IRule*> vec;
RuleRangeDouble *rule = new RuleRangeDouble(0, 100);
vec.push_back(rule);

现在如何制作不同规则的 vector ?我知道,我必须使用指针......但是我还需要做些什么才能让它工作?我怎样才能改变我的基本结构来完成这项工作?

我使用如下界面:

// Interface
template <typename T>
class IRule
{
public:
virtual bool isValid(T value) = 0;
};

我的示例类如下所示:

class RuleRangeDouble : public IRule<double>
{
private:
double min;
double max;
public:

bool isValid(double value)
{
....
};
};

最佳答案

vector 需要是一个实际类型的 vector ,例如std::vector<IRule<double>*> . Irule on its own is not a type,它是一个类模板。所以你需要

std::vector<IRule<double>*> vec;
RuleRangeDouble *rule = new RuleRangeDouble(0, 100);
vec.push_back(rule);

如果模板参数不是接口(interface)的一部分,可以引入一个公共(public)基类。别忘了给它一个 virtual析构函数:

class IRule
{
public:
virtual bool isValid(T value) = 0;
virtual ~IRule() {}
};

template <typename T>
class Rule : public IRule
{
.....
};

class RuleRangeDouble : public Rule<double>
{
....
};

然后您的原始用例示例将起作用:

std::vector<IRule*> vec; // IRule really is a type now
RuleRangeDouble *rule = new RuleRangeDouble(0, 100);
vec.push_back(rule);

关于c++ - 如何制作抽象模板类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17588037/

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