Как использовать ConditionalAttribute в C ++ - CLI? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть класс 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 ++ неактивна , управляемый атрибут ConditionalAttribute должен быть неактивен .

1 Ответ

0 голосов
/ 14 мая 2018

Приведенный ниже документ по стандартам довольно старый. Но предположим, что, возможно, все еще в силе.

https://www.ecma -international.org / публикации / файлы / ECMA-ST / ECMA-372.pdf

Перейти к разделу 29.4.3 (Вы можете найти ниже содержание об условных атрибутах в c ++ / CLI).

C ++ / CLI не предоставляет эту возможность; хотя атрибуты этого Тип принимаются, они не влияют на генерацию кода или выполнение.

...