Dav*_*ore 12 c++-cli visual-c++
我有一个项目,其中包括一些性能敏感的本机C++标头,大量使用模板.对于这个项目,我们还包装头文件并添加一些粘合代码以向c#和其他.NET语言公开功能.我们将此标题称为"layout.h",我们将假设它是第三方标题,我无法更改.
在混合模式C++/CLI程序集中,从#pragma unmanaged(或#pramga managed(push,off))代码中的某个位置出错并#include相对容易.当发生这种情况时,模板会生成IL,并且在运行代码时会获得额外的托管/非托管转换,并且性能会下降.
我的问题是,是否有一种方法可以在#include之前进行编译时检查,以便编译失败,如果我意外地从错误的上下文#including.
// File1.cpp, compiled in a mixed mode C++/CLI assembly with /clr
ASSERT_UNMANAGED()
#include <layout.h>
Run Code Online (Sandbox Code Playgroud)
我天真的第一次尝试检查了#ifdef _MANAGED,但总是定义我是否在#pragma非托管代码块中.
您可以编写ASSERT_MANAGED
或ASSERT_UNMANAGED
编码使用仅在编译托管或非托管时可用的构造。声明ref class
是一个仅在使用托管时可用的示例。
这是一个有点脏的解决方案,但它会起作用。
归档时间: |
|
查看次数: |
672 次 |
最近记录: |