Hoi, ik zit al een uurtje met mijn hoofd tegen het toetsenbord te rammen.
Ik probeer een variabele een andere waarde te geven in een andere functie. Triviaal - maar lukt niet.
Code waar het niet lukt:
De enige verandering nodig, zodat het werkt:
Zodra ik het adres van notificationHandle print, werkt het als een tierelier. Welke optimalisatie zit mij te dwarsbomen?
Dit is voor een x64 library gebouwd met Visual Studio 2019, C++17, /O2 optimalisatie, /Oi intrinsic functions. Verder standaard x64 release instellingen.
Mijn Google-fu levert weinig op. Ik denk dat de compiler slim probeert te zijn en het wegoptimaliseert. Het zou fijn zijn als ik de compiler op een of andere manier kan vertellen dat dit niet oké is.
Alternatieve oplossingen bestaan (geef reference door, maar dan moet ik een overload maken waar het oude bericht niet wordt verwijderd), maar liever wil ik een magisch keywordje hebben.
Iemand die hier soep van kan maken?
Ik probeer een variabele een andere waarde te geven in een andere functie. Triviaal - maar lukt niet.
Code waar het niet lukt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| // ScriptUtils.cpp namespace { int notificationHandle = 0; // Dit moet veranderen } void UI::Notify(const std::string& message) { logger.Write(DEBUG, "Notif with %d", notificationHandle); // Is altijd 0? showNotification(fmt::format("{}\n{}", Constants::NotificationPrefix, message), ¬ificationHandle); // Geeft pointertje door } // UIUtils.h void showNotification(const std::string &message, int *prevNotification); // UIUtils.cpp void showNotification(const std::string &message, int *prevNotification) { // gebruikt pointertje om oud bericht te verwijderen if (prevNotification != nullptr && *prevNotification != 0) { UI::_REMOVE_NOTIFICATION(*prevNotification); } UI::_SET_NOTIFICATION_TEXT_ENTRY("STRING"); UI::ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME((char*)message.c_str()); // id van nieuw bericht wordt gezet in notificationHandle via prevNotification ptr int id = UI::_DRAW_NOTIFICATION(false, false); if (prevNotification != nullptr) { // Logs geven hier non-0 aan voor beide kanten *prevNotification = id; } } |
De enige verandering nodig, zodat het werkt:
C++:
1
| logger.Write(DEBUG, "Notif with %d @ %p", notificationHandle, ¬ificationHandle); |
Zodra ik het adres van notificationHandle print, werkt het als een tierelier. Welke optimalisatie zit mij te dwarsbomen?
Dit is voor een x64 library gebouwd met Visual Studio 2019, C++17, /O2 optimalisatie, /Oi intrinsic functions. Verder standaard x64 release instellingen.
Mijn Google-fu levert weinig op. Ik denk dat de compiler slim probeert te zijn en het wegoptimaliseert. Het zou fijn zijn als ik de compiler op een of andere manier kan vertellen dat dit niet oké is.
Alternatieve oplossingen bestaan (geef reference door, maar dan moet ik een overload maken waar het oude bericht niet wordt verwijderd), maar liever wil ik een magisch keywordje hebben.
Iemand die hier soep van kan maken?