###実現したいこと
templateを使ってクラスのインスタンスを生成しているのですが、クラスを定義するときコンストラクタにおまじないのような引数を追加する必要があり、それを回避したいと思っています。
現在使用しているコードです(一部抜粋)
C++
1// シーンの親クラス 2class Scene{ 3public: 4Scene(const std::string& sceneName, const UINT sceneID) : 5m_SceneName{ sceneName }, m_SceneID{ sceneID } {} 6 7private: 8std::string m_SceneName{}; 9UINT m_SceneID{}; 10}; 11 12// サンプルシーン(ユーザーが定義するクラス) 13class SampleScene : public Scene { 14public: 15// おまじない引数 16SampleScene(const std::string& sceneName, const UINT sceneID) : 17Scene(sceneName, sceneID) {} 18}; 19 20// シーンを追加したりするクラス 21class SceneManager { 22public: 23template<class T> 24void AddScene(const std::string& sceneName) { 25 std::shared_ptr<T> scene = std::make_shared<T>(sceneName, m_Scenes.size()); 26 m_Scenes[sceneName] = scene; 27} 28 29private: 30std::map<std::string, std::shared_ptr<Scene>> m_Scenes; 31}; 32
###思いついた解決方法
・Sceneクラスに名前とIDを設定するprivateな関数を作成して、friendでSceneManagerにのみ公開する方法
個人的にfriendはコードが一気に汚れるので使いたくありません。。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。