У меня есть проект, который включает в себя некоторые высокопроизводительные родные заголовки С++, которые сильно используют шаблоны. Для этого проекта мы также обертываем заголовки и добавляем некоторый код, чтобы показать функциональность С# и других языков .NET. Мы будем называть этот заголовок "layout.h", и мы будем считать его третьим заголовком, который я не могу изменить.
В смешанной сборке С++/CLI относительно легко сделать ошибку и # включить из места в коде, где #pragma неуправляемый (или #pramga управляется (push, off)). Когда это происходит, шаблоны генерируют IL, и я получаю дополнительные управляемые/неуправляемые переходы при запуске кода, а производительность идет вниз.
Мой вопрос заключается в том, есть ли способ выполнить проверку времени компиляции перед #include, чтобы компиляция завершилась неудачно, если я случайно #including из неправильного контекста.
// File1.cpp, compiled in a mixed mode C++/CLI assembly with /clr
ASSERT_UNMANAGED()
#include <layout.h>
Моя наивная 1-я попытка проверена #ifdef _MANAGED, но это всегда определяется, находится ли я в неуправляемом блоке кода #pragma или нет.