如何在运行时检查是否存在类方法

时间:2014-06-11 10:22:40

标签: c++ methods ld-preload

我正在编写一个库,它使用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?中使用模板,因为我在编译期间会对模板进行评估。

此外,How to Check if the function exists in C/C++没有任何帮助。

0 个答案:

没有答案