我正在编写一个库,它使用LD_PRELOAD预加载到其他代码的不同版本(我不想/无法更改)。在以前的版本中,类A的类方法A :: foo()存在,而在更高版本中,它不存在。
对于全局(类C)函数,我使用属性((弱))机制来检查运行代码时是否实际定义了函数:
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();
有没有办法检查是否存在不依赖于编译时已知的定义?
我无法在Is it possible to write a template to check for a function's existence?中使用模板,因为我在编译期间会对模板进行评估。