Microsoft Visual C ++编译器具有属性声明构造
__declspec( property( get=get_func_name, put=put_func_name ) )
是否有编译器独立版本的Microsoft C ++ __declspec(property(...))或其他类似物?
答案 0 :(得分:4)
否强>
像往常一样,前面带有__
的标识符保留给编译器。在C ++ 03中,您有__cpluscplus
(以识别C ++与C),__FILE__
和__LINE__
。所有这些都是预处理器实体。
在C ++ 0x中,通过引入__attribute__
单词来区分差异,这是我所知道的第一个具有语义值的单词,但它仍然不能满足您的需求。< / p>
编辑:在评论时解决@James点。
答案 1 :(得分:0)
没有。向C ++标准委员会提出了类似的机制,但没有一个被接受(Here is one such proposal from Borland)。
我见过基于模板的玩具实现,但它们往往太不方便实际使用,主要问题是:
由于嵌套类实例不是封闭类的成员(与Java内部类实例一样),因此必须将属性显式“连接”到其封闭类,这会使声明和初始化变得麻烦。
无法在没有括号的情况下调用类似函数的实体,因此您无法像访问变量那样调用自定义属性。
答案 2 :(得分:0)
正如Nicola Musatti所说,有一个Borland proposal,主要是因为Borland Delphi大量使用Properties,而C ++ Builder(他们的C ++与Delphi相当)therefore requires it。
在C ++ Builder中,代码看起来有点像这样。
__property __int64 Size = {read=GetSize, write=SetSize};