为什么使用volatile参数模拟函数不是为GMock 1.8.0进行编译

时间:2018-05-22 09:01:36

标签: c++ volatile gmock

考虑此代码段

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缺少的功能吗?

1 个答案:

答案 0 :(得分:2)

open proposal扩展GMock以提供您需要的支持:

  

目前gmock没有用于模拟volatile和const的宏   易变的方法。有几种方法可以解决这个问题:

     
      
  1. 提供

         

    MOCK_VOLATILE_METHOD0 MOCK_VOLATILE_METHOD0_T
      MOCK_VOLATILE_METHOD0_WITH_CALLTYPE
      MOCK_VOLATILE_METHOD0_T_WITH_CALLTYPE

  2.         

    和朋友根据需要。

         
        
    1. 公开GMOCK_METHOD0_的变体以让用户写

           

      GMOCK_METHOD0(volatile,,Foo,int()); GMOCK_METHOD0_T(常量   volatile,,Bar,int());

    2.   

在此之前已被接受并实施 - 您可以通过调用“真实”函数中的模拟函数来解决此类问题:

virtual void foo(volatile int* param) { mockedFoo(const_cast<int*>(param)); }
MOCK_METHOD1(mockedFoo, int(int*));
相关问题