gpt4 book ai didi

c++ - 为具有特定成员变量值的类创建不同类型

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

给定一个类,该类具有一些定义类类型的枚举,如下例所示:

class Fruit {
public:

enum class FruitType {
AppleType = 0,
OrangeType = 1,
BananaType = 2,
};
Fruit(FruitType type) : type_(type) {}
FruitType fruit_type() const { return type_; }

private:
FruitType type_;
};

以及从它派生的共享相同枚举的类:

class DriedFruit : public Fruit {
public:
// Some Dried specific methods.
};

是否有可能以某种方式为 Fruit 和 DriedFruit 定义一个具有每个特定枚举值的不同类型:

class Apple   // Fruit with FruitType = AppleType
class Orange // Fruit with FruitType = OrangeType
class Banana // Fruit with FruitType = BananaType
class DriedApple // DriedFruit with FruitType = AppleType
class DriedOrange // DriedFruit with FruitType = OrangeType
class DriedBanana // DriedFruit with FruitType = BananaType

因此 Apple、Orange 和 Banana 这 3 个类是不同的类型,而 DriedApple、DriedOrange、DriedBanana 这 3 个类是不同的类型。

我的问题有点类似于How to define different types for the same class in C++ , 除了我想将有关类类型的信息显式存储为类中的枚举成员变量,并为所有不同类型提供一个公共(public)基类。

最有效的方法是什么?

编辑:主要用例如下 - 在我的应用程序中,有些方法只期望 Apple 作为输入,或者只期望 Orange 作为输入,还有许多方法不关心它是哪种水果。

将 Fruit 传递给只期望 Apple 的方法感觉不安全/晦涩,同时有许多方法不关心它是哪种类型,因此拥有 3 种不同的类型也不是一个好的选择。

主要工作流程如下:从一些输入参数构建一个 Fruit,然后传递它并将其作为水果处理,然后在某个时候如果它是 Apple,则将 Fruit 转换为具体的 Apple 类型,并进一步处理它,从那时起将其类型限制为 Apple。

最佳答案

What would be the most efficient way to do that?

您可以使用非类型模板参数:

enum class FruitType {
AppleType = 0,
OrangeType = 1,
BananaType = 2,
};

template <FruitType F>
class Fruit {
public:
FruitType fruit_type() const { return F; }
};

using Apple = Fruit<FruitType::AppleType>;
using Banana = Fruit<FruitType::BananaType>;

是否需要实际的基类取决于您。为某些 FruitType 提供模板特化可能也足够了。

关于c++ - 为具有特定成员变量值的类创建不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560519/

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