shared ptr — реализация фабричной функции интерфейса C ++

Контекстуализация:

Я работаю над алгоритмом распознавания лиц, и NIST — это организация, которая пытается стандартизировать тесты, измерения и сравнения среди всех доступных алгоритмов. Для того, чтобы проверить и сравнить, мне нужно реализовать их интерфейс, который доступен в FRVT Project, более конкретно на frvt11.h файл.

frvt11.h Соответствующий код для этого вопроса:

namespace FRVT {

//...A lot of code defining ReturnStatus, ReturnCode, etc.

/**
* @brief
* The interface to FRVT 1:1 implementation
*
* @details
* The submission software under test will implement this interface by
* sub-classing this class and implementing each method therein.
*/
class Interface {
public:
virtual ~Interface() {}

virtual ReturnStatus
initialize(const std::string &configDir) = 0;

/**
* @brief
* Factory method to return a managed pointer to the Interface object.
* @details
* This function is implemented by the submitted library and must return
* a managed pointer to the Interface object.
*
* @note
* A possible implementation might be:
* return (std::make_shared<Implementation>());
*/
static std::shared_ptr<Interface>
getImplementation();
};
}

implementation.h Соответствующий код реализации, которую я разрабатываю:

#include "frvt11.h"using namespace FRVT;

struct Implementation : public Interface {

ReturnStatus
initialize(const std::string &configDir) override;

static std::shared_ptr<Interface>
getImplementation();
};

implementation.cpp Соответствующий код реализации, которую я разрабатываю:

#include "implementation.h"using namespace FRVT;

ReturnStatus
Implementation::initialize(
const std::string &configDir) {
return ReturnStatus(ReturnCode::Success," - initialize");
}

std::shared_ptr<Interface>
Implementation::getImplementation() {
return (std::make_shared<Implementation>());
}

Напоследок мой вопрос:

Вопрос: Как реализовать getImplementation () для возврата упомянутого «управляемого указателя на объект интерфейса»?

1

Решение

Я думаю, что вы можете просто сделать следующее:

std::shared_ptr<Interface> Implementation::getImplementation() {
return std::make_shared<Implementation>();
}

int main() {
auto interface = Implementation::getImplementation();
}

А также interface будет иметь тип std::shared_ptr<Interface>, Вы можете далее передать это.

1

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

Других решений пока нет …

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