如何在C++-CLI中使用ConditionalAttribute?

4
我有一个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++预处理指令是活动的,那么托管的ConditionalAttribute也应该是活动的。 另一方面,如果本地c++预处理指令是不活动的,那么托管的ConditionalAttribute也应该是不活动的

我进一步澄清一下。所有的代码都编译通过了,而且C++预处理指令确实是激活状态。只是管理条件属性始终为false。我希望它能根据C++预处理指令的情况来激活或不激活。 - Elad Maimoni
@AdrianoRepetti 我做了一些编辑,希望这样更清晰地表达意图。 - Elad Maimoni
1
C++/CLI 编译器没有内置 [Conditional] 功能,你需要使用 C++ 的方式来完成。请使用 #ifdef。 - Hans Passant
@HansPassant,当我在C++/CLI上使用[Conditional]时,它确实有影响。只是缺少字符串条件参数。无论如何,我现在先使用#ifdef。 - Elad Maimoni
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接