Znacie jakiś trick by zadziałała poniższa konstrukcja?
obj.pPointerToSmth->someMethod();
ale tak, by nie można było zmodyfikować wskaźnika w taki sposób:
obj.pPointerToSmth = someAddress;
Nie chcę zwracać wskaźnika za pomocą metody:
obj.pPointerToSmth()->someMethod();
Oczywiście potrzebuję ten wskaźnik ustawić jeden raz po uruchomieniu programu, po utworzeniu obiektu, na który ma ów wskaźnik wskazywać. Ustawiłbym go sobie jakimś setterem (metodą).
Próbowałem wykorzystać:
http://www.codeproject.com/Articles/118921/C-Properties
ale Visual C++ Express 2010 nie akceptuje kodu properties.h, zwraca:
properties.h(5): error C2143: syntax error : missing ')' before '='
properties.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
properties.h(5): error C2014: preprocessor command must start as first nonwhite space
Przykład:
// ObjectManager to singleton.
#define objManager ObjectManager::GetInstance()
WinMain()
{
Window pWindow = new Window(...); // Niech Window będzie jakimś oknem windowsowym.
objManager.SetPtrToWindow(pWindow);
// Inny kod...
objManager.pWindow->Show(); // Wyświetlamy okienko.
objManager.pWindow = NULL; // Próbujemy zmodyfikować wskaźnik. Źle - kompilator powinien nam w tym miejscu uciąć głowę i rzucić rekinom na pożarcie ;-)
}
EDIT: Udało mi się doprowadzić do działania mechanizm z properties.h, ale ten kawałek kodu:
objManager.pWindow = NULL;
spowoduje wyświetlenie błędu dopiero po uruchomieniu kompilacji. W trakcie edytowania kodu IDE nie podkreśli tego jako błąd - macie pomysł jak rozwiązać również ten problem?