0

私は設計上の問題に直面しており、外部入力で行うことができます。抽象基本クラスのキャストを回避しようとしています (それは悪いと聞いたので)。

問題は次の構造にあります。

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ました... とにかく、入力は大歓迎です。

構文エラーがある場合は、お詫び申し上げます。

4

1 に答える 1