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

标签 c++ class oop c++11

我有以下类(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/

相关文章:

java - 在 Java 中未将类对象检测为类

php - 如何通过子类设置/修改父类变量?

c++ - 正确的 "polymorphic"方式存储枚举,有时存储一些数据

c++ - 如何避免将类成员传递给回调的类似 const 和非 const 成员函数之间的代码重复?

c++ - 在 Visual Studio 中配置 "Application Verifier"

Java新手: Difference between <> and ()?

c++ - 内联说明符与类成员一起使用时 undefined reference

用于非类型模板参数的 c++ enable_if

c++ - 使用作为 lambda 传递的自定义比较器创建集

javascript - 使对象的所有属性可变