是否可以在c ++中使用类似c#的属性?起初我以为没有,我没有找到任何声称它有这个的来源。
但是我发现了一个头文件(最初看起来是用c#编写的,但它实际上是c ++)并且在该文件中似乎用属性关键字声明了属性:
property Boolean AlphaToCoverageEnable
{
Boolean get()
{
return alphaToCoverageEnable;
}
void set(Boolean value)
{
alphaToCoverageEnable = value;
}
}
我试图在日食中使用它,但它并不喜欢它......有没有办法做到这一点?我需要包含的标题还是与编译方式有关的内容?
答案 0 :(得分:2)
您正在查看C ++ / CLI,它是C ++的Microsoft扩展,增加了.Net支持。
C ++不支持属性,但是你可以通过滥用运算符重载来制作像属性一样的东西。
例如,请参阅http://msdn.microsoft.com/en-us/magazine/cc534994.aspx
答案 1 :(得分:1)
简单地说,C ++(该语言)不支持C#风格的属性。属性使用两个函数实现:setter和getter。甚至C#属性也在CLI级转换为setter / getter函数。
C ++语言的Microsoft C ++ / CLI扩展似乎支持C#样式属性,但ANSI标准C ++语言不支持。
答案 2 :(得分:0)
这是C ++ / CLI,而不是标准C ++。 C ++ / CLI支持属性,因为它旨在与.NET概念无缝协作。
您可以直接在public value struct BlendDescription
类声明中说明 - value struct
定义C ++ / CLI值类型(C#中的struct
)。
答案 3 :(得分:0)
我使用了CodeGuru项目中的代码:http://www.codeproject.com/Articles/118921/C-Properties
使用它我创建了一个包含以下内容的“properties.h”文件:
#define PROPERTY(t,n) __declspec( property
( put = property__set_##n, get = property__get_##n ) ) t n;\
typedef t property__tmp_type_##n
#define READONLY_PROPERTY(t,n) __declspec( property (get = property__get_##n) ) t n;\
typedef t property__tmp_type_##n
#define WRITEONLY_PROPERTY(t,n) __declspec( property (put = property__set_##n) ) t n;\
typedef t property__tmp_type_##n
#define GET(n) property__tmp_type_##n property__get_##n()
#define SET(n) void property__set_##n(const property__tmp_type_##n& value)
示例属性为:
PROPERTY(LatLonAltTuple, LatLonAlt);
GET(LatLonAlt) { return m_LatLonAlt; }
SET(LatLonAlt) { m_LatLonAlt = value; }