Я пишу библиотеку, которая предварительно загружается с использованием LD_PRELOAD для различных версий другого кода (который я не хочу / не могу изменить). В предыдущей версии метод класса A :: foo () класса A существует, а в более поздней версии — нет.
Для глобальной (C-like) функции я использую атрибут((слабый)) механизм, чтобы проверить, действительно ли функция определена при запуске кода:
void foo() __attribute__(weak));
if (foo) { foo(); }
Кажется, это не работает для учеников.
Ошибка времени компиляции:
no ‘int somenamespace::SomeClass::someFunction()’ member function declared in class ‘somenamespace::SomeClass’
int somenamespace::SomeClass::someFunction() __attribute__((weak));
^
...
./file.cpp: In member function ‘virtual void somenamespace::OtherClass::initialize()’:
./file.cpp:397:32: error: ‘class somenamespace::SomeClass’ has no member named ‘someFunction’
num = theinstance.someFunction();
Есть ли способ проверить существование, которое не зависит от определения, известного во время компиляции?
Я не могу использовать шаблоны как в Можно ли написать шаблон для проверки существования функции? потому что шаблоны я оцениваю во время компиляции.
Также, Как проверить, существует ли функция в C / C ++ не помог.
Задача ещё не решена.