Может ли Google имитировать метод с возвращаемым типом интеллектуального указателя?

У меня есть фабрика, которая возвращает умный указатель. Независимо от того, какой умный указатель я использую, я не могу заставить Google Mock имитировать фабричный метод.

Мок-объект - это реализация чисто абстрактного интерфейса, в котором все методы являются виртуальными. У меня есть прототип:

MOCK_METHOD0(Create, std::unique_ptr<IMyObjectThing>());

И я получаю:

"...gmock/gmock-spec-builders.h(1314): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'"

Тип, на который указывает интеллектуальный указатель, определен.

И я понимаю, что он пытается получить доступ к одному из конструкторов, объявленных частными, но я не понимаю почему. Когда это был std :: auto_ptr, в ошибке говорилось, что нет конструктора копирования, что меня смущает.

В любом случае, есть ли способ имитировать метод, возвращающий умный указатель? Или есть лучший способ построить завод? Разве мое единственное решение - вернуть необработанный указатель (тупица ...)?

Моя среда - Visual Studio 2010 Ultimate и Windows 7. Я не использую интерфейс командной строки.

46
задан vitaut 30 November 2016 в 21:47
поделиться