C ++如何通过它的名字查找类?

时间:2017-10-05 12:46:56

标签: c++ linux ld-preload

如何通过了解类名和方法名来找到一个类来调用它的方法?

详细说明: 我正在尝试编写库来替换另一个程序中的某些函数,这些函数也是通过LD_PRELOAD功能使用C ++编写的。 我需要能够从程序中调用函数来集成这个库。

2 个答案:

答案 0 :(得分:1)

C ++在编译过程中丢失所有类命名信息!

你不能这样做:

Class.forName("MyClass");

就像你从Java中知道的那样。

http://en.cppreference.com/w/cpp/language/class

这种技术称为反射,它不受C ++的支持 您可以使用框架(例如Boost)来帮助您,但是您必须使用此框架声明和定义要调用的方法。

答案 1 :(得分:1)

C ++不支持反射,因此在编译后不能按名称搜索函数/类。

听起来如果可能,设计需要重新设计。理想情况下,您应该更新库以包含程序所需的内容。要么将通用逻辑从程序中拉出到第三个库中 - 要么将需要程序调用的函数放入当前库中,只需将相关数据传递给库即可。

如果无法做到这一点,您可以将程序中的函数指针传递到库中 - 这使得库可以访问所需的函数,而无需真正了解它的来源。

void library_function1(std::function<void(int)> func)
{
     func(1);
}