一、属性介绍
今天在书上无意间看到一个语法__declspec(property), 它是 Microsoft Visual C++ (MSVC) 编译器提供的一个非标准扩展语法,用于在 C++ 类中模拟"属性(property)"的概念,允许你像访问成员变量一样调用 getter/setter 函数。
__declspec(property) 是 Microsoft 特有的扩展,不被 GCC、Clang 支持。
如果你需要跨平台代码,应避免使用它,改用普通 getter/setter。
二、测试代码
代码片:
javascript
// test class
class CTestProperty
{
public:
CTestProperty() {}
~CTestProperty() {}
int getAge() const {
std::cout << "==>call get func." << std::endl;
return m_age;
}
void setAge(int v) {
std::cout << "==>call set func." << std::endl;
m_age = v;
}
__declspec(property(get=getAge, put=setAge)) int age;
private:
int m_age = 20;
};
//test call
CTestProperty p;
p.age = 33;
std::cout << "==>ret: ";
std::cout << p.age << std::endl;
//output:
==>call set func.
==>ret: ==>call get func.
33