Можно ли определить метод класса C ++, который будет компилироваться чисто, но при появлении предупреждения используемый, каким-то образом похожим на неосуществленные функции библиотеки C? Что-то вроде:
int MyClass::frobnicate()
{
link_warning(frobnicate, "function not implemented");
return 0;
}
__attribute__((deprecated))
или новее [[deprecated]]
Атрибуция имеет правильную функциональность (это то, что я буду использовать, если нет другого выбора), но я бы не хотел говорить пользователю, что frobnicate
не рекомендуется, если его просто невозможно реализовать из-за причины XYZ.
Пример кода C (из Glibc):
#define link_warning(symbol, msg) \
__make_section_unallocated (".gnu.warning." #symbol) \
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((used, section (".gnu.warning." #symbol __sec_comment))) \
= msg;
Предупреждение, которое выдает этот макрос, выглядит следующим образом (вот пример кода, использующего его):
/path/to/file.o: в функции `symbol ‘:
/path/to/file.c:line: предупреждение: сообщение
Наивный link_warning(MyClass::frobnicate, "function not implemented")
кажется, не работает, и поиск и использование украшенных имен кажется хакерским и непереносимым (и я не уверен, что это действительно сработает).
Задача ещё не решена.
Других решений пока нет …