【发布时间】:2020-12-19 05:31:07
【问题描述】:
我正在尝试更新 C/C++ 代码,想要使用 getter 和 setter 进行跟踪和/或测试。
为一般声明制作了一个模板类
#include <iostream>
using namespace std;
#define TRACK_PROP(a,b) TrackProp<a> b(#b);
#define TRACK_PROP_SET(a,b,c) TrackProp<a> b(#b, c);
template <class T>
class TrackProp {
public:
T _content;
const char* Name;
TrackProp(const char* name) { Name = name; }
TrackProp(const char* name, T val) { Name = name; _content = val; }
T operator =(T right)
{
if (_content != right) {
cout << Name << ":" << _content << "->" << right << endl;
_content = right;
}
return _content;
}
operator T() const
{
return _content;
}
T operator ++()
{
operator = (_content + 1);
return _content;
}
T operator ++(int)
{
operator = (_content + 1);
return _content - 1;
}
T operator --()
{
operator = (_content - 1);
return _content;
}
T operator --(int)
{
operator = (_content - 1);
return _content + 1;
}
T operator +=(int right)
{
operator = (_content + right);
return _content;
}
T operator -=(int right)
{
operator = (_content - right);
return _content;
}
};
我现在可以轻松翻译声明
int foo;
int bar = 2;
// These 2 or even some object can be declared by
TRACK_PROP(int, foo);
TRACK_PROP_SET(int, bar, 2);
foo = 1; // = operator /setter
int baz;
baz = bar; // () operator /getter
但在 C 文件中使用时也会出现问题。
您将如何更改它以保留 Get/Set/Name 功能并能够在 C 文件中像在 C++ 中一样简单地使用它?
【问题讨论】:
标签: c++ c getter-setter