我正在编写一个库,该库使用 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();
有没有办法检查是否存在不依赖于编译时已知的定义?
我不能使用模板,如是否可以编写模板来检查函数是否存在?因为我的模板是在编译期间评估的。
此外,如何检查 C/C++中是否存在该函数也无济于事。