3

是否可以在 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

4

4 回答 4

2

您正在查看 C++/CLI,它是 Microsoft 对 C++ 的扩展,增加了对 .Net 的支持。

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

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

于 2013-02-08T16:47:13.787 回答
1

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

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

于 2013-02-08T16:46:56.390 回答
0

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

您可以直接在public value struct BlendDescription类声明中说明 -value struct定义 C++/CLI 值类型(struct在 C# 中)。

于 2013-02-08T16:47:01.333 回答
0

I've used the code from this CodeGuru project: http://www.codeproject.com/Articles/118921/C-Properties

Using that I created a "properties.h" file containing this:

#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)   

with an example property being:

PROPERTY(LatLonAltTuple, LatLonAlt);
GET(LatLonAlt) { return m_LatLonAlt; }
SET(LatLonAlt) { m_LatLonAlt = value; }
于 2013-02-08T16:50:57.363 回答