gpt4 book ai didi

c++ - 优雅地访问嵌套类中的数据

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:16 26 4
gpt4 key购买 nike

我有以下类(class):

class BigNum
{
public:
BigNum(string StrNumber) : Number(std::move(StrNumber)) {}
BigNum(const char *StrNumber) : Number(string(StrNumber)) {}
~BigNum() = default;

struct
{
string HEX() { return Number + " - HEX"; }
string DEC() { return Number + " - DEC"; }
string BIN() { return Number + " - BIN"; }
}ToString;

private:
string Number;
};

最后我想通过以下方式优雅地访问该结构中的函数:

BigNum a = "1234";
cout << "a = " << a.ToString.DEC() << endl;
cout << "b = " << a.ToString.HEX() << endl;

这里的问题是我无法从我的结构中访问变量 Number

我知道这样可以解决我的问题:

struct
{
string HEX(BigNum &parent) { return parent.Number + " - HEX"; }
...
}ToString;

此解决方案的问题在于,总是将指针传递给我的实例并不舒服。

在这种情况下,在嵌套类中拥有数据并同时保持调用像 a.ToString.DEC() 一样简单的解决方案是什么?

最佳答案

在某种程度上,您必须为 ToString 提供一个引用或指向 BigNum 对象的指针,以便您可以访问 Number。像这样的事情怎么样:

class BigNum
{
public:
BigNum(string StrNumber) : Number(std::move(StrNumber)) {}
BigNum(const char* StrNumber) : Number(string(StrNumber)) {}
~BigNum() = default;

// you can make the struct private so the type is not visible externally
struct ToStringType
{
private:
const BigNum& ref;

public:
ToStringType(const BigNum& r) : ref(r) {}

string HEX() { return ref.Number + " - HEX"; }
string DEC() { return ref.Number + " - DEC"; }
string BIN() { return ref.Number + " - BIN"; }
};

ToStringType ToString{ *this };

private:
string Number;
};

无关紧要,但我建议只使用单独的 ToStringHexToStringDecToStringBin 函数。节省了不存储引用的时间,而且 API 更容易使用。

关于c++ - 优雅地访问嵌套类中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338862/

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