考虑此代码段
MOCK_METHOD1(foo, int(volatile int*));
这段代码与GMock 1.7.0编译得很好,但是当我更新到GMock 1.8.0时它会抛出错误
../gmock/fused-src/gtest/include/gtest/gtest-printers.h:467:6: error: reinterpret_cast from type 'volatile int*' to type 'const void*' casts away qualifiers
*os << reinterpret_cast<const void*>(p);
^
很明显它没有编译,因为根据定义,reinterpret_cast
无法删除cv限定符。
我还需要提一下,我使用的是c ++ 98,所以不幸的是remove_volatile
无法使用。
另外,一些功能&#39;默认情况下,参数具有volatile说明符,因为它们与嵌入式设备中的内存直接交互。
有没有办法摆脱这个问题?
它实际上是Gmock缺少的功能吗?
答案 0 :(得分:2)
有open proposal扩展GMock以提供您需要的支持:
目前gmock没有用于模拟volatile和const的宏 易变的方法。有几种方法可以解决这个问题:
- 醇>
提供
MOCK_VOLATILE_METHOD0 MOCK_VOLATILE_METHOD0_T
MOCK_VOLATILE_METHOD0_WITH_CALLTYPE
MOCK_VOLATILE_METHOD0_T_WITH_CALLTYPE和朋友根据需要。
- 醇>
公开GMOCK_METHOD0_的变体以让用户写
GMOCK_METHOD0(volatile,,Foo,int()); GMOCK_METHOD0_T(常量 volatile,,Bar,int());
在此之前已被接受并实施 - 您可以通过调用“真实”函数中的模拟函数来解决此类问题:
virtual void foo(volatile int* param) { mockedFoo(const_cast<int*>(param)); }
MOCK_METHOD1(mockedFoo, int(int*));