我真的在为 C++ 中的一个问题而苦苦挣扎,我真的很沮丧:
问题是当我编码时没有错误,一切看起来都很好(我使用的是 Vs2012)但是当我尝试在那里编译它时有很多错误,取决于我如何改变代码。我真的无法让它工作,我希望你能帮助我,这对专家来说应该很容易!这基本上是我的一些代码,所有包含的内容都是 finde 并且项目设置正确:
class someclass //that stores the references
{
public:
// ..........
template <typename T>
T* getComponent(string name)
// headers and cpp files are actually seperated
{
auto itr = _map.find(name);
if (itr == _map.end())
return 0;
return dynamic_cast<T*>(itr->second);
}
private:
unordered_map<string, Baseclass*> _map;
}
我试图调用它的方式类似于:
DerivedFromBase* d = someclass->getComponent<DerivedFromBase>("derived");
我不知道我是否误解了模板非常糟糕,或者我离解决方案仅一步之遥,这就是为什么我在这里发布我的问题,我希望专家给我一个提示。我只是想稍微润色一下我的代码,没有模板它看起来像这样(并且它有效):
class someclass
{
Base* getComponent(string) //...
};
我称之为:
Derived* d = (Derived*) someclass->getComponent(name);
这确实有效,但我认为模板的概念会更好,但同样,我不知道我是否误解了它。提前感谢您的任何帮助!
谢谢你的提示。我真的忘记了这里的括号,但它们在我的代码中。顺便说一句,对不起我的英语不好,我希望你能理解我的意思;)我是否必须转换为 T 或 T* (实际的返回类型或者演员是否已经给了我一个 T* 以便我在 T* 中的演员实际上会导致T* ? 我在我的 cpp 和我的头文件中都有模板的定义,这可能是错误,因为当我将它留在 c++ 文件中时,它会说“未知类型说明符 T”,但如果我把这在我的 .h 文件之上,我的整个类被认为是一个模板类(这不是我想要的,因为我需要几个派生类(lkie derived1,derived2* 等不同类型)。我希望这是不知何故有用,再次感谢所有的努力!