gpt4 book ai didi

c++ - 使用模板在 C++ 中进行转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:24 25 4
gpt4 key购买 nike

我真的在为 C++ 中的一个问题而苦苦挣扎,我真的很沮丧:
问题是当我编码时没有错误,一切看起来都很好(我使用的是 Vs2012)但是当我尝试编译它时有很多错误,这取决于我如何改变代码。我真的无法让它工作,我希望你能帮助我,这对专家来说应该很容易!这基本上是我的一些代码,所有包含的代码都已找到并且项目设置正确:

    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* 等不同类型). 我希望这在某种程度上有用,再次感谢所有的努力!

最佳答案

我认为一些问题是由于 cpp 编译器完成的自动转换而发生的。

尝试使用模板(左方括号)class mytype(右方括号)

关于c++ - 使用模板在 C++ 中进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com