У меня есть фабрика, которая возвращает умный указатель. Независимо от того, какой умный указатель я использую, я не могу заставить 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. Я не использую интерфейс командной строки.