2013-08-28 6 views
5

http://msdn.microsoft.com/en-us/library/es7h5kch.aspxCzy jest jakaś szansa, że ​​następna wersja C++ będzie miała rozszerzenie własności Microsoft?

Ta funkcja wygląda całkiem nieźle. Byłoby świetnie, bo nie potrzebowałbyś już żadnych pobierających. Możesz uczynić zmienne składowe publicznymi; później, jeśli zmienisz zdanie, możesz przekształcić je w własność.

Czy jest to coś, co rozważała standardowa komisja? Czy jest to coś, co prawdopodobnie zaakceptowaliby lub odrzucili? Czy to już istnieje i po prostu jeszcze o tym nie wiem?

+4

Nie jest to coś, na co może odpowiedzieć ktokolwiek spoza C++. – millimoose

+6

Chłopcze, mam nadzieję, że nie. –

+0

Może to pomóc: [Specyficzne MS, __declspec, właściwość] (http://msdn.microsoft.com/en-us/library/yhfk0thd.aspx) –

Odpowiedz

7

To jest stare. Borland dodał ją najpierw, w latach 90., z C++ Builder, jeśli się nie mylę. Microsoft podążył tą drogą, w tamtych czasach byli bardzo konkurencyjni. COM Automation była dość ważnym motywatorem.

Biorąc pod uwagę, że miało to trzy wersje językowe w języku C++ do gulaszu, a także kontrowersje wokół niego, szanse na to, że zostanie to uwzględnione w przyszłej wersji, dotyczą zera.

Właściwości mają swoje zastosowanie, ale powodują znaczne trudności przy ich wdrażaniu. Przekazywanie nieruchomości przez odniesienie to na przykład bardzo trudny problem do rozwiązania. Osoba odwołująca się musi wiedzieć, że wywoływacz musi zostać wywołany, zamiast tylko dereferencji wskaźnika i musiałby wiedzieć, czy istnieje nawet pobierający lub ustawiający. Jedynym praktycznym rozwiązaniem jest po prostu zabronienie tego, niekoniecznie atrakcyjne w C++. Dodatkowe problemy pojawiają się, gdy zaczynasz obsługiwać domyślne właściwości, bardzo trudno je pominąć, wprowadzając niejednoznaczność składni.

+0

Prawdopodobnie chodzę tu na kończynę, ale wydaje mi się, że pamiętam, że Common Lisp miał pewne pojęcie o pierwszorzędnych wartościach l. (" Formy place "lub niektóre takie.) Wcześniejsze prace nad ich kompilacją mogłyby pomóc w rozwiązaniu tych problemów, chociaż sądzę, że w Lisps bardziej akceptowalnym rozwiązaniem byłaby utrata wydajności w celu wspierania tych skrajnych przypadków. – millimoose

+0

Użycie obiektu proxy przez odniesienie jest również praktycznym rozwiązaniem, o ile przekazanie go do ogólnego algorytmu (szablonowego i zdolnego do zaakceptowania obiektu proxy). Tak czy inaczej jest to metoda C++. –

7

Ponieważ jest to już możliwe w standardowym C++ przy użyciu podejścia tylko do biblioteki (obiekty proxy), jest mało prawdopodobne, aby zmiany języka i nowe słowa kluczowe były widoczne. W przeciwieństwie do lambdas (na przykład), tutaj cukier syntaktyczny nie jest aż tak słodki (nie zmienia zbytnio poziomu abstrakcji).

BTW, zmieniając pola (zmienne składniowe bez opakowania) na właściwości jest zawsze zmianą zrywającą, ponieważ można tworzyć wskaźniki i odniesienia do pól oraz bezpośrednio je odczytać/zapisać. W przypadku właściwości musisz mieć opakowanie, aby upewnić się, że używane są procedury pobierające i ustawiające.

Powodem rozszerzenia Microsoft jest to, że nie zapewnia on po prostu właściwości (przechwytywanie funkcji odczytu i zapisu do funkcji pobierających i ustawiających) w kodzie C++. Generuje metadane .NET lub metadane WinRT (odpowiednio w C++/CLI i C++/CX), które są używane przez odbicie. Standardowe C++ nie ma refleksji ani metadanych.

Należy również zauważyć, że programiści C++ raczej nie stosują wzoru wzorca proxy, co wskazuje komitetowi, że nie ma dużego zapotrzebowania na "czystszy" cukier syntaktyczny.

+0

Ta odpowiedź jest również doskonała; niestety, mogę tylko oznaczyć jedną odpowiedź jako poprawną: "( – allyourcode

Powiązane problemy