You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HippoMocks模拟boost::chrono::steady_clock::now编译失败求助

问题:无法用HippoMocks模拟boost::chrono::steady_clock::now()函数

原业务代码

boost::system::error_code clock_error;
const boost::chrono::steady_clock::time_point START = 
boost::chrono::steady_clock::now(clock_error);

测试模拟代码

boost::chrono::steady_clock::time_point start(boost::chrono::seconds(0));
boost::system::system_error clock_error(1, BOOST_CHRONO_SYSTEM_CATEGORY, "foo");
mocks.ExpectCallFuncOverload( (boost::chrono::steady_clock::time_point (boost::chrono::steady_clock::*) (boost::system::error_code& clock_error))
                                        &boost::chrono::steady_clock::now)    
                    .With(Out(clock_error))
                    .Return(start);

编译错误信息

error: no matches converting function ‘now’ to type
‘boost::chrono::steady_clock::time_point (class
boost::chrono::steady_clock::)(class boost::system::error_code&) {aka
class boost::chrono::time_pointboost::chrono::steady_clock (class
boost::chrono::steady_clock::
)(class boost::system::error_code&)}’
mocks.ExpectCallFuncOverload(

In file included from ...

note: candidates are: static boost::chrono::steady_clock::time_point
boost::chrono::steady_clock::now(boost::system::error_code&)

static BOOST_CHRONO_INLINE time_point  now(system::error_code & ec);

                                          ^

../../../KACotsCode/boost/boost/chrono/system_clocks.hpp:162:46: note:
static boost::chrono::steady_clock::time_point
boost::chrono::steady_clock::now()
static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;

^

问题分析与解决

编译失败有两个核心问题:

1. 静态成员函数的指针类型错误

boost::chrono::steady_clock::now是静态成员函数,静态成员函数没有隐含的this指针,因此它的函数指针类型是普通函数指针,而非带类作用域的非静态成员函数指针格式。

你当前写的指针格式是针对非静态成员函数的:

boost::chrono::steady_clock::time_point (boost::chrono::steady_clock::*) (boost::system::error_code&)

静态成员函数的正确指针格式应该是:

boost::chrono::steady_clock::time_point (*)(boost::system::error_code&)

2. 参数类型不匹配

测试代码中你声明的clock_error是boost::system::system_error(异常类),但now()函数的参数要求是boost::system::error_code&(错误码类),两者类型不兼容,需要替换为正确的error_code类型。

修正后的测试代码

boost::chrono::steady_clock::time_point start(boost::chrono::seconds(0));
boost::system::error_code clock_error(1, BOOST_CHRONO_SYSTEM_CATEGORY); // 改用error_code类型
mocks.ExpectCallFuncOverload(
    // 修正静态成员函数的指针类型
    (boost::chrono::steady_clock::time_point (*)(boost::system::error_code&))&boost::chrono::steady_clock::now
)
.With(Out(clock_error))
.Return(start);

内容的提问来源于stack exchange,提问作者zephod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:25:06