2

私は本当にイライラしている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++ ファイルに残すと、「unknown type-specifier T」のようなメッセージが表示されますが、これは私の.hファイルの上にあり、私のクラス全体はテンプレートクラスと見なされます(これは私が望むものではありません。なぜなら、私はいくつかの派生クラス(lkieの派生1、派生2 *など、さまざまなタイプが必要だからです)。これがどういうわけかだったことを願っています便利です。すべての努力に感謝します。

4

2 に答える 2