我找到了一个适合我的 hack。将错误处理程序日志级别设置为 0 仅允许错误消息通过。覆盖 MessageHandler 的 print 方法然后允许对错误做出反应。这种解决方法绝对是一个 hack。如果有人有更好的建议,我很乐意接受不同的答案。
class ErrorCatchingCoinMessageHandler: public CoinMessageHandler {
public:
ErrorCatchingCoinMessageHandler()
: CoinMessageHandler() {
// Would be nice to also overwrite setLogLevel to avoid later changes
// but its not virtual
setLogLevel(0);
}
virtual int print() __attribute__((noreturn)) {
CoinMessageHandler::print();
abort(); // or throw a CoinError
}
};
// Use it like this
lp_solver->passInMessageHandler(new ErrorCatchingCoinMessageHandler());