我有一个库,可以通过在其标题中使用define来替换free
,malloc
和其他几个函数:
#define free some_custom_free
不幸的是,当其他库(在这种情况下是提升)使用std::free
而不是直接调用free
时,这会非常糟糕:
error: 'some_custom_free' is not a member of 'std'
这是否可以正确且可移植地解决,最好不必触及任何一个库?
答案 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。