【发布时间】:2020-01-19 07:43:03
【问题描述】:
我想从 std::map 中返回一个元素作为指针,但我不断收到此错误并且找不到解决方法。
map的第二个元素是一个IService的指针,getService的返回是一个指向T的指针,它是一个IService,所以我不明白为什么会出现这个错误。
// Locator.h
template <class T>
class Locator
{
public:
static T* getService(ServiceType serviceType);
static void provide(ServiceType serviceType, T* service);
private:
static std::unordered_map<ServiceType, IService*> _services;
};
// Locator.cpp
template <class T>
T* Locator<T>::getService(ServiceType serviceType)
{
for (auto itr = _services.find(serviceType); itr != _services.end(); itr++)
{
return itr->second;
}
}
//IService.h
class IService
{
public:
virtual void start() = 0;
virtual void stop() = 0;
virtual void update() = 0;
};
【问题讨论】:
-
请提供minimal reproducible example:
T可能不是您想的那样。 -
无关,但
for循环看起来奇怪。根本没有循环,你为什么要使用循环? -
@molbdnilo 好吧,如果
T是从IService派生的类,那它就说得通了。我认为这是这里尝试的,在这种情况下dynamic_cast<T*>应该解决它。 -
如果
serviceType不是_services的键,getService也有未定义的行为,我很确定编译器真的想警告你。 -
@MaxLanghof 我同意你的看法,所以我同意。