c ++:如何获得类似c#的属性

时间:2013-02-08 16:45:20

标签: c++ properties

是否可以在c ++中使用类似c#的属性?起初我以为没有,我没有找到任何声称它有这个的来源。

但是我发现了一个头文件(最初看起来是用c#编写的,但它实际上是c ++)并且在该文件中似乎用属性关键字声明了属性:

property Boolean AlphaToCoverageEnable
{
    Boolean get()
    {
        return alphaToCoverageEnable;
    }

    void set(Boolean value)
    {
        alphaToCoverageEnable = value;
    }
}

我试图在日食中使用它,但它并不喜欢它......有没有办法做到这一点?我需要包含的标题还是与编译方式有关的内容?

我找到的文件: https://dl.dropbox.com/u/847423/D3D10Structs.h

4 个答案:

答案 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; }