Не удалось скомпилировать, пока аргумент лямбда. [используя бегемотов]

Я написал модульный тест с hippomocks, но получил ошибку при компиляции.

Компилятор VS 2010.

Как я могу это исправить?

#include "hippomocks.h"#include <functional>

using namespace HippoMocks;

struct A
{
virtual void f(std::function<void (int)> arg);
};

int main(void)
{
MockRepository mock;
A* aptr = mock.Mock<A>();

mock.ExpectCall(aptr, A::f);  // error

return 0;
}

Выход:

main.cpp
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323) : wa
rning C4530: C++ exception handler used, but unwind semantics are not enabled. S
pecify /EHsc
c:\users\cong\project\test\test\hippomocks.h(466) : error C2593: 'operator <<' i
s ambiguous
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\ostream(2
06): could be 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Trai
ts>::operator <<(std::_Bool)'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\users\cong\project\test\test\hippomocks.h(441): or       'std::ostrea
m &HippoMocks::operator <<(std::ostream &,const HippoMocks::NotPrintable &)'
while trying to match the argument list '(std::ostream, std::tr1::functi
on<_Fty>)'
with
[
_Fty=void (int)
]
c:\users\cong\project\test\test\hippomocks.h(463) : while compiling clas
s template member function 'void HippoMocks::printArg<T>::print(std::ostream &,T
,bool)'
with
[
T=std::tr1::function<void (int)>
]
c:\users\cong\project\test\test\hippomocks.h(614) : see reference to cla
ss template instantiation 'HippoMocks::printArg<T>' being compiled
with
[
T=std::tr1::function<void (int)>
]

0

Решение

Усиление комментария @ dascandy здесь — это то, как может выглядеть его метод. Поместите его после включения hippomocks.h:

template<>
struct printArg<std::function<void (int)> >
{
static inline void print(std::ostream &os, std::function<void (int)> arg, bool withComma)
{
if (withComma)
{
os << ",";
}
if (arg)
{
os << "true";
}
else
{
os << "false";
}
}
};

Обратите внимание, что я не тестировал этот пример, а принял наше решение и адаптировал тип к примеру исходного поста. Я был бы рад узнать, работает ли это для вас.

0

Другие решения


По вопросам рекламы [email protected]