我有一个库,通过在它的标题中使用定义来替换free
和malloc
其他几个函数:
#define free some_custom_free
不幸的是,当其他库(在这种情况下为提升)使用std::free
而不是直接调用时,这会严重中断free
:
error: 'some_custom_free' is not a member of 'std'
这可以适当且可移植地解决,最好不必接触任何一个库吗?
没有。从星期天起,你就被搞砸了一千种方式,因为使用的图书馆#define
是由南方古猿编写的。唯一的解决方案是更改所做的库#define free
。
你应该使用__malloc_hook
,它允许你改变做什么malloc
。
设置__malloc_hook
为实际运行some_custom_malloc
设置__free_hook
为运行some_custom_free
删除#define
,一切都会好起来的!
另一种选择 - 确保#include
该库始终位于#include
for boost/stl/whatever 之后。