Я хочу отметить чистый виртуальный метод в базовом классе 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.
Предупреждения компилятора выводятся и в том случае, если я помечаю только базовый метод как устаревший, и если я использую макрос как для базового метода, так и для переопределений.
*) как вставка сообщения (…) или статического утверждения в определение функции каждого переопределения и вставка их, или что-то в этом роде … Я не думаю, что это того стоит.
Задача ещё не решена.
Других решений пока нет …