Предупреждать только при * вызове * устаревшего метода - PullRequest
0 голосов
/ 03 июля 2018

Я хочу пометить чисто виртуальный метод в базовом классе deprecated и получить предупреждение компилятора, когда кто-то пытается вызвать метод (или его переопределения) где-то, но не , как в настоящее время для каждого объявления переопределения - поскольку метод является чисто виртуальным в базовом классе, все дочерние классы должны реализовать его для создания экземпляров, но это означает, что каждое из этих переопределений создает (или несколько) предупреждение (я) компилятора, которое как бы спамит вывод. Поэтому я хотел бы выдать предупреждение только тогда, когда метод (или одно из переопределений) называется .

Возможно ли это как-то без прыжков через обручи *?

PS: я помечаю базовый метод как устаревший, используя следующий макрос:

#if defined(_MSC_VER)
    #define DEPRECATED __declspec(deprecated)
#elif defined(__GNUC__) || defined(__clang__)
    #define DEPRECATED __attribute__((deprecated))
#else
    #pragma message("WARNING: DEPRECATED macro not implemented for this compiler")
    #define DEPRECATED
#endif

… и я сейчас компилирую в VS2015. Предупреждения компилятора выводятся и в том случае, если я помечаю только базовый метод как устаревший, и если я использую макрос как для базового метода, так и для переопределений.

*) как вставка сообщения (...) или статического утверждения в определение функции каждого переопределения и вставка их, или что-то в этом роде ... Я не думаю, что это того стоит.

...