2013-02-08 5 views
3

Возможно ли иметь C# -подобные свойства в C++? Сначала я подумал, что нет, и у меня нет источника, который утверждает, что он имеет это.C++: как получить свойства C# -like

Но я нашел файл заголовка (который, кажется, написано в C# на первый, но это на самом деле с ++) и в этом файле, кажется, объявить свойства со свойством ключевого слова:

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

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

Я попытался использовать это в затмении, но ему это не понравилось ... Есть ли способ сделать это? Заголовок, который мне нужно включить или что-то делать с его компиляцией?

файл я нашел: https://dl.dropbox.com/u/847423/D3D10Structs.h

+0

D3D10 ... Это, вероятно, MSVC расширение, например 'interface'. – chris

+0

У C++ нет свойств, и нет возможности реализовать их, по крайней мере, для некоторых расходов, написав дополнительный код и потратив некоторую память. – PlasmaHH

ответ

1

Проще говоря, C++ (язык) не поддерживает C# -Style свойства. Свойства реализуются с двумя функциями: сеттер и геттер. Даже свойства C# переводятся на CLI-уровне в функции setter/getter.

Похоже, что расширения Microsoft C++/CLI для языка C++ поддерживают свойства стиля C#, но стандартный язык C++ на языке ANSI не поддерживает.

0

Это C++/CLI, а не стандартный C++. C++/CLI поддерживает свойства, поскольку он предназначен для бесшовной работы с концепциями .NET.

Вы можете прямо указывать в объявлении класса public value struct BlendDescription - value struct определяет тип значения C++/CLI (struct в C#).

2

Вы просматриваете C++/CLI, который является расширением Microsoft для C++, которое добавляет поддержку .NET.

C++ не поддерживает свойства, но вы можете создавать вещи, которые действуют как свойства, злоупотребляя перегрузками операторов.

Например, см http://msdn.microsoft.com/en-us/magazine/cc534994.aspx

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; } 
Смежные вопросы