【发布时间】:2018-05-10 07:01:53
【问题描述】:
我有一个 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++ 预处理器指令是 active,则托管 ConditionalAttribute 也应该是 active。 另一方面,如果原生 c++ 预处理器指令是inactive,则托管的 ConditionalAttribute 应该是inactive。
【问题讨论】:
-
我会进一步澄清。一切都会编译,C++ 预处理器指令肯定是活动的。只有管理条件属性始终为假。我希望它根据 c++ 预处理器指令是否处于活动状态。
-
@AdrianoRepetti 我做了一些编辑,希望这能让意图更清晰。
-
C++/CLI 编译器没有管道来执行 [Conditional] 事情,您应该以 C++ 方式执行此操作。使用#ifdef。
-
@HansPassant 当我在 C++/CLI 上使用 [Conditional] 时,它确实有效果。只是缺少字符串条件参数。无论如何,我现在使用#ifdef。