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

c++: how to get c#-like properties

本文关键字:属性 何获得 c++      更新时间:2023-10-16

在c++中有可能拥有类似c#的属性吗?一开始我觉得没有,我也没有找到任何声称它有这个的来源。

但我发现了一个头文件(一开始似乎是用c#编写的,但实际上是c++),在该文件中,它似乎用property关键字声明属性:

property Boolean AlphaToCoverageEnable
{
    Boolean get()
    {
        return alphaToCoverageEnable;
    }
    void set(Boolean value)
    {
        alphaToCoverageEnable = value;
    }
}

我试着在eclipse中使用它,但它不喜欢…有办法做到这一点吗?一个我需要包含的头,或者一个与它如何编译有关的头?

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

您看到的是C++/CLI,它是微软对C++的扩展,添加了。网络支持。

C++不支持属性,但您可以通过滥用运算符重载来生成类似属性的东西。

例如,请参见http://msdn.microsoft.com/en-us/magazine/cc534994.aspx

简单地说,C++(该语言)不支持C#风格的属性。属性由两个函数实现:setter和getter。甚至C#属性也在CLI级别转换为setter/getter函数。

Microsoft C++/CLI对C++语言的扩展似乎支持C#样式的属性,但ANSI标准C++语言不支持。

这是C++/CLI,而不是标准C++。C++/CLI支持属性,因为它旨在与无缝配合。NET概念。

您可以直接在public value struct BlendDescription类声明中判断——value struct定义了一个C++/CLI值类型(C#中的struct)。

我使用了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; }