Пользовательский элемент C ++ для члена "Указатель" / Доступ - PullRequest
0 голосов
/ 12 марта 2020

Я обнаружил замечательную особенность лет go, когда искал что-то в Google. Это позволило использовать своего рода «функцию» для управления доступом к переменной-члену, но я больше не могу ее найти. (Я также не уверен, была ли это функция C ++ или указана только c для компилятора msv c, потому что он был выделен красным в Visual Studio, как если бы он был меткой или чем-то еще)

Теория, лежащая в основе это было что-то похожее на это:

class A
{
public:
.test(int value)
{
  priv = value;
}
private:
int priv = 0;
};

...
A a;
a.test = 14; // Sets priv to 14 ! note no () needed after test´

Кто-нибудь знает, что это такое / было?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Спасибо всем за ответы, но нет, это не было C#, как некоторые люди отчаянно пытались мне сказать.

Документы Microsoft - свойство (C ++)

Для тех, кому интересно, как это работает:

struct S
{
    int i;
    void putprop(int j) {
        i = j;
    }

    int getprop() {
        return i;
    }

    __declspec(property(get = getprop, put = putprop)) int the_prop;
};

 S s;
    s.the_prop = 5;
    int test = s.the_prop;
0 голосов
/ 12 марта 2020

Назначенный инициализатор

Если бы мне пришлось размышлять, вы, скорее всего, видели обозначенный инициализатором C99

Это выглядит так:

MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };

Это C единственная вещь и не существует в C ++. Было принято предложение для C ++ 20, которое включало их ограниченную поддержку: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0329r4.pdf

C ++ / CLI Property

Другая вещь на ум приходят свойства, часть управляемого C ++.

Вы бы использовали их вот так (источник: https://docs.microsoft.com/en-us/cpp/extensions/property-cpp-component-extensions?view=vs-2019)

public ref class C {
   int MyInt;
public:

   // property data member
   property String ^ Simple_Property;

   // property block
   property int Property_Block {

      int get();

      void set(int value) {
         MyInt = value;
      }
   }
};

int C::Property_Block::get() {
   return MyInt;
}

int main() {
   C ^ MyC = gcnew C();
   MyC->Simple_Property = "test";
   Console::WriteLine(MyC->Simple_Property);

   MyC->Property_Block = 21;
   Console::WriteLine(MyC->Property_Block);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...