我想用我自己的来覆盖纯虚拟调用的标准处理程序 (__cxa_pure_virtual()
)。 Windows 的答案是“_set_purecall_handler()”。
Linux/GNU 中是否有类似的工具?
最佳答案
您差点靠自己回答这个问题。这是 gcc/libstdc++-v3/libsupc++/pure.cc
中 __cxa_pure_virtual
的来源:
extern "C" void
__cxxabiv1::__cxa_pure_virtual (void)
{
writestr ("pure virtual method called\n");
std::terminate ();
}
因此,没有直接等同于带有 GCC 的 Microsoft 的 _set_purecall_handler
。但是,由于此函数调用了 std::terminate
,因此您可以使用 std::set_terminate
来设置在打印消息后调用的处理程序。
另一种可能的解决方案是提供您自己的 __cxxabiv1::__cxa_pure_virtual
定义来覆盖库函数。像这样:
namespace __cxxabiv1 {
extern "C" void
__cxa_pure_virtual(void) {
char const msg[] = "my pure virutal\n";
write(2, msg, sizeof msg - 1);
std::terminate();
}
}
关于c++ - Linux 中是否有等同于 _set_pure call handler() 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510452/