6
我目前沒有成功模擬一個返回unique_ptr的接口。例如,給定HippoMocks - 模擬一個函數,返回一個unique_ptr
struct IFoo {
virtual std::unique_ptr<IFoo> foo = 0;
};
int main()
{
MockRepository mocks;
auto foo = mocks.Mock<IFoo>();
mocks.OnCall(foo, IFoo::foo)
.Return(std::unique_ptr<IFoo>());
}
這不能編譯,因爲Return
實施使的unique_ptr
Call &Return(Y obj) { retVal = new ReturnValueWrapper<Y>(obj); return *this; }
的副本,並期望試圖返回的unique_ptr
template <typename Z>
Z MockRepository::DoExpectation(base_mock *mock, std::pair<int, int> funcno, const base_tuple &tuple)
{
...
return ((ReturnValueWrapper<Z> *)call->retVal)->rv;
}
我已經嘗試Do
,建議for a similar problem with returned references。
我也試過編寫我自己的ValueWrapper<T>
,它生成一個unique_ptr,但在某處值總是被複制。現在我已經沒有想法了。
看來HippoMocks還沒有準備好用於C++ 11的移動類型。也許你可以爲'ReturnValueWrapper>'編寫一個專門化程序,它不會*在內部複製? –
2013-03-01 14:58:20
你有沒有試過hippomocks以後的版本,有一個C++ 0x版本? – 2013-03-01 16:00:43
@Arne我或多或少地嘗試過這樣的事情。顯然我最初做錯了什麼。在另一個去之後,我發現了一個可行的解決方案。稍後我會將它添加到[github存儲庫](https://github.com/dascandy/hippomocks)。 – Thomas 2013-03-01 17:15:26