私は昨日質問しましたが、間違って尋ねたようですので、ここでもう一度やります。私はすぐにこのコードを嘲笑し、これがオブジェクトを扱うための適切な方法であるかどうか疑問に思っています(main()
にすべてを入れているのではありません)。これは初めて大きなプロジェクトを完了しようとするので、オブジェクトが含まれており、どのように処理するか疑問にする必要があります。(C++)他のすべてのカスタムオブジェクトを扱うための特別なクラス/オブジェクトの作成は、プロジェクトを処理するための適切な方法ですか?
skill.h
#pragma once
#include <string>
#include <vector>
#include <memory>
#include <unordered_map>
class Skill;
typedef std::vector<std::shared_ptr<Skill>> SkillVector;
typedef std::unordered_map<std::string, std::shared_ptr<Skill>> SkillMap;
class Skill {
private:
std::string _skill_name;
std::string _skill_description;
friend std::ostream& operator<< (std::ostream& stream, const Skill& skill);
void print(std::ostream& stream) const;
public:
Skill(const std::string& skill_name, const std::string& skill_description);
const std::string& getSkillName() const;
const std::string& getSkillDescription() const;
bool isMatch(const std::string& substring) const;
};
application.h
#pragma once
#include "skill.h"
extern std::string SKILL_FILE;
class Application {
private:
std::unique_ptr<SkillMap> _skill_map;
void loadData();
void loadSkills();
void printSkillMap();
void printSkillVector(const SkillVector& skills);
std::unique_ptr<SkillVector> skillSearch(const std::string& input) const;
public:
Application();
void run();
};
main.cppに
#include "application.h"
int main() {
std::unique_ptr<Application> application(new Application);
application->run();
return 0;
}
これはコマンドラインアプリケーションであるため、これ以外には、アプリケーションクラスのすべてのメソッドを通常の関数としてそのままメインに置くこと以外は何もすることはできません。それは正しいアプローチのようには思われません。私はこれをかなり広範囲に研究しようとしましたが、実際にこれに答えるものは見つかりませんでした。
すべてのオブジェクトを順序どおりに格納するための他のオプションは何ですか?特定のやり方をする利点は何ですか?私がここで受け入れていることは受け入れられているのでしょうか?
注:これは私のプロジェクトの正確な表現ではありません。私はちょうど例として私の質問を理解するための例としてそれを使用しています。
これを実行する最善の方法はありませんが、[デザインパターン](https://www.developer.com/design/overview-of- design-patterns-for-beginners.html) あなたは[this](http://gameprogrammingpatterns.com/contents.html)を読むことができます。あなた自身がもっと便利な情報を見つけてください。時間厳守をしたら、私たちは喜んで助けてくれるでしょう。 – Immac
それは実際にゲームのためではありませんが、それでも私はそれを見ていきます。 – dbrew5
私はあなたが以前にJavaを試したかもしれないという印象を受けます。 :-)クラス内にすべての関数を置く必要はありません。あなたは 'new'を使ってオブジェクトを作成する必要はありませんし、' unique_ptr'を使う必要はありません*所有権を譲渡するつもりはありません。 –