我有一个 C++-CLI ref 类,它公开了用 C++ 实现的分析基础结构。
C++我有预处理器指令PROFILING_ENABLED
来确定侵入性分析函数是否在代码中。
在向托管代码公开这些代码时,我认为使用托管ConditionalAttribute
是合适的。但我在语法上挣扎。
这是我的尝试:
#ifdef PROFILING_ENABLED
// c++ macros are defined and active on the project level, I would like the
// conditional attribute to be active as well.
#define MANAGED_PROFILING_ENABLED
// how do I define the managed conditional "MANAGED_PROFILING_ENABLED" in C++-CLI?
#endif
public ref class Profiler
{
public:
[ConditionalAttribute("MANAGED_PROFILING_ENABLED")] // this compile but always inactive
static void PushRange(System::String ^ name, Color color);
[ConditionalAttribute("MANAGED_PROFILING_ENABLED")]
static void PopRange();
};
我想实现以下目标: 如果本机 c++ 预处理器指令处于活动状态,则托管条件属性也应处于活动状态。另一方面,如果本机 c++ 预处理器指令处于非活动状态,则托管条件属性应处于非活动状态。
下面的标准文档很旧。但假设,可能仍然有效。
https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-372.pdf
转到第 29.4.3 节(您可以在下面找到有关 c++/CLI 中条件属性的内容(。
C++/CLI 不提供此功能;尽管此功能的属性 类型被接受,它们对代码生成或 执行。