私は設計上の問題に直面しており、外部入力で行うことができます。抽象基本クラスのキャストを回避しようとしています (それは悪いと聞いたので)。
問題は次の構造にあります。
class entity... (base with pure virtual functions)
class hostile : public entity... (base with pure virtual functions)
class friendly : public entity... (base with pure virtual functions)
// Then further derived classes using these last base classes...
最初は、次の方法でうまくいくと思っていました。
const enum class FactionType : unsigned int
{ ... };
std::unordered_map<FactionType, std::vector<std::unique_ptr<CEntity>>> m_entitys;
そして...私はそうしましたが、特に敵対的または友好的なものから「ユニークな」機能にアクセスする必要があるため、これは問題を引き起こします。
私は恥ずかしそうに試しました(うまくいきましたが、好きではなく、安全だとも感じません):
// For-Each Loop: const auto& friendly : m_entitys[FactionType::FRIENDLY]
CFriendly* castFriendly = static_cast<CFriendly*>(&*friendly);
unordered_map
基本抽象クラス型のキーとして使用する設計を維持することを望んでいた/維持しようとしていFactionType
ました... とにかく、入力は大歓迎です。
構文エラーがある場合は、お詫び申し上げます。