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

时间:2013-08-06 12:59:47

标签: c++ templates casting

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

2 个答案:

答案 0 :(得分:0)

我认为由于cpp编译器自动转换,一些问题正在出现。

尝试使用模板(左侧支架)类mytype(右侧支架)

答案 1 :(得分:-1)

尝试将模板T定义为类:

template <class T>

如果没有一些可靠的错误信息,除了这一点之外我无法提供帮助,一眼就能看出我或多或少。