替换std命名空间中的函数

时间:2013-07-19 01:50:00

标签: c++ std

我有一个库,可以通过在其标题中使用define来替换freemalloc和其他几个函数:

#define free some_custom_free 

不幸的是,当其他库(在这种情况下是提升)使用std::free而不是直接调用free时,这会非常糟糕:

error: 'some_custom_free' is not a member of 'std'

这是否可以正确且可移植地解决,最好不必触及任何一个库?

2 个答案:

答案 0 :(得分:2)

不。因为使用#define的图书馆是由南方古猿写的,所以你从星期日开始就被搞砸了一千个。唯一的解决方案是更改执行#define free的库。

答案 1 :(得分:1)

您应该使用__malloc_hook,这样您就可以更改malloc的内容。

  • 设置__malloc_hook以实际运行some_custom_malloc

  • 设置__free_hook以运行some_custom_free

  • 删除#define,一切正常!

另一种选择 - 确保此库的#include总是在#include之后的boost / stl / whatever。