私は本当にイライラしている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 *など、さまざまなタイプが必要だからです)。これがどういうわけかだったことを願っています便利です。すべての努力に感謝します。