Почему фиктивные функции с изменчивыми аргументами не компилируются для GMock 1.8.0 - PullRequest
0 голосов
/ 22 мая 2018

Учитывая этот фрагмент

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, к сожалению, может

Кроме того, некоторые аргументы функций по умолчанию имеют переменный спецификатор из-за их прямого взаимодействия с памятью во встроенном устройстве.

Есть ли способ избавитьсяэтой проблемы?

это действительно отсутствующая функция в Gmock?

1 Ответ

0 голосов
/ 22 мая 2018

Существует открытое предложение о расширении GMock для обеспечения необходимой вам поддержки:

В настоящее время в gmock нет макросов для насмешливых и постоянных изменчивых методов.Есть несколько вариантов решения этой проблемы:

  1. предоставить

    MOCK_VOLATILE_METHOD0 MOCK_VOLATILE_METHOD0_T
    MOCK_VOLATILE_METHOD0_WITH_CALLTYPE
    101 * 1015_TLE__TOL__TOL__TOL__T_L_T_L_T_L_T_L_T_L_T__T_L_T_00_MT_друзья по мере необходимости.

  2. раскрыть вариант GMOCK_METHOD0_, чтобы позволить пользователю написать

    GMOCK_METHOD0 (volatile,, Foo, int ());GMOCK_METHOD0_T (const volatile,, Bar, int ());

До того, как это будет принято и реализовано - вы можете обойти подобные проблемы, вызвав mocked-функцию из "real"один:

virtual void foo(volatile int* param) { mockedFoo(const_cast<int*>(param)); }
MOCK_METHOD1(mockedFoo, int(int*));
...