gpt4 book ai didi

c++ - 定义类的类枚举常量而不提供对类构造函数的访问

转载 作者:行者123 更新时间:2023-12-04 16:59:43 25 4
gpt4 key购买 nike

在 Java 中,我可以定义具有多个成员和成员函数的枚举常量,但不提供对枚举构造函数的公共(public)访问,因此客户端代码无法创建除已定义的枚举之外的枚举。
我想在 C++ 中模拟这种行为,并尝试这样做:

// Card ranks of a 52-card deck
class _CardRank {
public:
_CardRank(int val, char repr) : val{ val }, repr{ repr } {};

int get_val() { return val; };
char get_repr() { return repr; };

private:
int val;
int repr;
};

namespace CardRank {
const _CardRank C_2(0, '2');
const _CardRank C_3(1, '3');
const _CardRank C_4(2, '4');
const _CardRank C_5(3, '5');
const _CardRank C_6(4, '6');
const _CardRank C_7(5, '7');
const _CardRank C_8(6, '8');
const _CardRank C_9(7, '9');
const _CardRank C_T(8, 'T');
const _CardRank C_J(9, 'J');
const _CardRank C_Q(10, 'Q');
const _CardRank C_K(11, 'K');
const _CardRank C_A(12, 'A');
}
这给了我我正在寻找的范围常量,但是客户端代码仍然能够创建新的常量。是否有任何惯用的解决方案,或者这种设计模式对 C++ 无效?

最佳答案

您可能会使用 classnamespace允许友元:

class CardRank
{
private:
friend class CardRankNamespace;
constexpr CardRank(int val, char repr) : val{ val }, repr{ repr } {}

public:
int get_val() const { return val; }
char get_repr() const { return repr; }
private:
int val;
int repr;
};

class CardRankNamespace
{
public:
static constexpr CardRank C_2{0, '2'};
// ...
};

关于c++ - 定义类的类枚举常量而不提供对类构造函数的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67121553/

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