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