Mam projekt, który obejmuje niektóre wrażliwe na wydajność macierzyste nagłówki C++, które intensywnie korzystają z szablonów. W przypadku tego projektu owijamy również nagłówki i dodajemy kod kleju, aby odsłonić funkcjonalność dla języków C# i innych .NET. Nazwiemy ten nagłówek "layout.h", a założymy, że jest to nagłówek strony trzeciej, którego nie mogę zmienić.Czy istnieje sposób na wykrycie, czy #pragma niezarządzana obowiązuje w C++/CLI?
W zespole C++/CLI trybu mieszanego stosunkowo łatwo popełnić błąd i #zmienić z miejsca w kodzie, w którym #pragma niezarządzana (lub #pramga zarządzana (push, off)). Kiedy tak się dzieje, szablony generują IL, a ja uzyskuję dodatkowe zarządzane/niezarządzane przejścia podczas działania kodu, a wydajność spada.
Moje pytanie brzmi: czy jest sposób, w jaki mogę wykonać test w czasie kompilacji tuż przed #include, aby kompilacja nie powiodła się, jeśli jestem przypadkowo # uwzględnienie z niewłaściwego kontekstu.
// File1.cpp, compiled in a mixed mode C++/CLI assembly with /clr
ASSERT_UNMANAGED()
#include <layout.h>
Mój naiwny 1. podejściu sprawdzone #ifdef _MANAGED, ale to jest zawsze określona, czy jestem w #pragma niekontrolowana bloku kodu, czy też nie.
+1: Interesujące pytanie. – leppie
To jest naprawdę trudne. Mogę wymyślić tuzin różnych sposobów implementacji 'ASSERT_MANAGED', ale' ASSERT_UNMANAGED' ma mnie zakłopotany. – ildjarn
na wszelki wypadek, gdy na co patrzysz, _MANAGED, __CLR_VER i __cplusplus_cli nie mają wpływu #pragma managed/#pragma ummanaged, tam zakresy są całą jednostką kompilującą. –