从成员变量自动生成属性代码会非常棒(很像VisualAssist或Resharper功能,用于访问器功能)。我发现这些问题已经过时了:
How to generate getters and setters in Visual Studio?
How to generate automatic properties (get, set) for Visual Studio 2008 C++
这个问题适用于C#:
https://stackoverflow.com/questions/32864873/generate-property-in-one-line-in-visual-studio-2015
但我似乎无法在VS2015中找到任何关于C ++的明确答案。
有没有人找到办法做到这一点?我更喜欢内置的VS功能或可靠的第三方插件(购买还可以)。
谢谢,
答案 0 :(得分:0)
是的,这在一定程度上是可能的。如果我没有误解,那么有一种方法可以缩短属性,如果get和set没有做任何花哨的事情:
public:
property int MyValue{
int get(void){return _myValue;}
void set(int value){_myValue = value;}
}
private:
int _myValue;
可以很容易地缩短为:
`property int MyValue;`
旁注:如果您的财产需要PropertyChanged事件,您将不得不做很多事情:
public:
property int MyValue{
int get(void){return _myValue;}
void set(int value){
_myValue = value;
NotifyPropertyChanged("MyValue");
}
}
virtual event PropertyChangedEventHandler^ PropertyChanged
private:
int _myValue;
void NotifyPropertyCHanged(Platform::String^ prop){
PropertyChangedEventArgs^ args = ref new PropertyChangedEventArgs(prop);
PropertyChanged(this, args);
}
答案 1 :(得分:0)
从纯C ++的角度来看,并假设您不反对使用非标准的Microsoft语言扩展,则可以使用__declspec(property
struct Entity {
//**************************************************** PROPERTY: heading
float heading_get() const;
void heading_set(float value);
__declspec(property(get = heading_get, put = heading_set)) float heading;
private:
float _heading = {};
};
float Entity::heading_get() const { return _heading; }
void Entity::heading_set(float value) { _heading = value; }
void usage() {
Entity entity;
entity.heading = std::clamp<float>(entity.heading, 0, 360);
}
为简单起见,您可以使用宏简化此操作:
#define PROPERTY(TYPE, NAME) \
TYPE _##NAME; \
TYPE get_##NAME() const { return _##NAME; } \
void set_##NAME(TYPE _) { _##NAME = (_); } \
\
__declspec(property(get = get_##NAME, put = set_##NAME)) TYPE NAME
它不漂亮,但是会为您提供真实属性( ish )