gpt4 book ai didi

c++ - 子类中具有不同值的静态基类属性

转载 作者:行者123 更新时间:2023-11-30 02:25:14 25 4
gpt4 key购买 nike

我有不同的对象可以生产。每种对象类型都有不同的成本。我想检查用户是否能负担得起创建特定对象BEFORE。以下方法不符合此要求:

class Costs {
public:
int oneCost, anotherCostAttribute; // Actual values for both attribute may differ for the objects
}

class Object {
public:
virtual Costs getCosts() = 0;
}

class Object_A : public Object {
// implement getCosts (always the same for all A's)
}

class Object_B : public Object {
// implement getCosts (always the same for all B's)
}

// Usage:
// I would have to create a specific object just to check the costs:
Object* pObj = new Object_A();
if(avilableResources >= pObj->getCosts()) {
// Store object, otherwise delete it
}

我的第二个想法是某种提供虚拟静态函数的基类,但这在 C++ 中是不可能的:

class Object {
public:
virtual static Costs getCosts() = 0;
}

仅使用静态Costs 属性无法区分子类成本:

class Object {
public:
static Costs m_costs; // All objects (A,B,...) would cost the same
}

将成本直接关联到对象的正确方法是什么?

最佳答案

您可以通过模板提供此信息:

template <typename CostsT>
struct Object {
static CostsT m_costs;
};

例如,您可以有一个基 Costs 类:

struct Costs {
virtual int oneCost() = 0;
virtual int anotherCost() = 0;
};

并且您使用 Costs 的特定类型的子类声明您的对象:

struct Costs_A: Costs {
virtual int oneCost() override { return 1; }
virtual int anotherCost() override { return 2; }
};
using Object_A = Object<Costs_A>;

这样您就可以在决定是否实例化 Object_A 之前检索特定的 Costs 实例:

Costs costsA = Object_A::m_costs;

关于c++ - 子类中具有不同值的静态基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540064/

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