使用宏来实现没有参数的功能

时间:2017-11-27 17:46:23

标签: c++ struct macros getter

我有一个结构即TStream。它有2个受保护的成员,可以通过getters访问。

struct TStream {
protected:
    long long size, position;
    FILE *f;
public:
    ...
    long long Get_Size(void) {
        return size;
    }

    long long Get_Pos(void) {
        return position;
    }
} TStream;

我可以用宏替换Get_Size()和Get_Pos()吗?

#define Size Get_Size()
#define Position Get_Pos()

1 个答案:

答案 0 :(得分:0)

您可能需要的是一个包含private数据成员和protected setter函数以及public getter的类:

class TStream {
    long long size, position;
    FILE *f;
protected:
    void Set_Size(long long value) {
        size = value;
    }
    void Set_Pos(long long value) {
        position = value;
    }
public:
    // ...
    long long Get_Size(void) const {
        return size;
    }

    long long Get_Pos(void) const {
        return position;
    }
};

此类直接继承自TStream的类/结构可以更改private成员,但仍可以从public范围访问这些值。

无论如何,宏都不会改变这些c ++范围方面的任何内容。