C++ C#-os Property szimulálás

C++ C#-os Property szimulálás
2010-08-12T21:51:20+02:00
2010-08-12T22:07:45+02:00
2022-11-18T19:40:42+01:00
HunterSeeker
Sziasztok.

A következő módon probálom C++-ban szimulálni a C#-os Property-ket:

#include<iostream> class MyClass { public: class WidthProperty { private: int Value; public: int operator=(const int&); operator int() const; } Width; }; int MyClass::WidthProperty::operator=(const int& pValue) { return (this->Value = pValue); } MyClass::WidthProperty::operator int() const { return this->Value; } class MyClass2 { public: class { private: int Value; public: int operator=(const int& pValue) { return (this->Value = pValue); } operator int() const { return this->Value; } } Width; }; int main() { MyClass myClass; myClass.Width = 8; std::cout << myClass.Width << std::endl; MyClass2 myClass2; myClass2.Width = 12; std::cout << myClass2.Width << std::endl; return 0; }

A problémám az, hogy a MyClass2 abból a szempontból szimpatikusabb, hogy amikor mondjuk nyomok egy MyClass2::-t, akkor az IntelliSense nem fogja kidobni a sok belső osztályt. A MyClass-nak viszont az az előnye, hogy külön tudom választani header és forrás fájlokba a deklarációt és definiciót.
A kérdésem az lenne, hogy nem lehetne valahogy a kettő jó tulajdonságait egyesíteni?
Tehát gyakorlatilag, hogy maradjanak az unnamed class-ok viszont valahogy tudjak rájuk hivatkozni, amikor a definíciókat az osztályon kívül csinálom meg.
Mutasd a teljes hozzászólást!
szia,
milyen környezetet használsz?
csak mert a microsoft visual c++ 2008 tud propertyket kezelni(bár eléggé sajátságosan ):
class MyClass { int _n; public: __declspec(property(get=_getN, put=_setN)) int valami; void _setN(int value) { _n = value; } int _getN() { return _n; } } ... MyClass c; c.valami = 5; ...
Mutasd a teljes hozzászólást!

  • Tudom nem pont ez volt a kérdés, de miért kell így kombinálni össze-vissza?

    szerintem ne csináljunk fából vaskarikát:
    class MyClass { private: int width; public: void Width(int width) { this.width = width; } int Width() { return width; } }; MyClass m; m.Width(12); int w = m.Width();
    Mutasd a teljes hozzászólást!
  • szia,
    milyen környezetet használsz?
    csak mert a microsoft visual c++ 2008 tud propertyket kezelni(bár eléggé sajátságosan ):
    class MyClass { int _n; public: __declspec(property(get=_getN, put=_setN)) int valami; void _setN(int value) { _n = value; } int _getN() { return _n; } } ... MyClass c; c.valami = 5; ...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd