2011-03-05 4 views
2

로더 클래스를 생각하고 두 가지 접근법을 생각해 냈습니다.C++ 로더 클래스

class Loader{ 
public: 
    Loader(const Path& path); 
    File load() const; 

private: 
    Path path_; 
}; 

첫 번째 방법으로

class Loader{ 
public: 
    Loader(); 
    File load(const Path& path) const; 
}; 

대, 내가 파일 당 하나의 로더를 필요 Loader 클래스는 상태를 나타냅니다. 두 번째로 하나의 로더 클래스로 다른 파일을로드 할 수 있습니다. 이러한 명백한 차이 외에 어떤 방법을 선택하겠습니까? 왜 3 번째 이유가 있을까요? 아니면 가장 뛰어난 방법입니까?

답변

2

다른 접근법도 있습니다.

파일을로드 할 때 Loader 클래스의 어떤 상태를 유지하지 않는 경우에, 당신은 단순히 무료 기능

File load(const Path& path); //a free function. 

을 쓸 수 있습니다 또는 당신이 그것을가 될하려는 경우 함수 static을 만들 수 있습니다 멤버 함수

class Loader{ 
public: 
    static File load(const Path& path); 
}; 

//usage 
Loader::load(path); 

때때로 이러한 솔루션은 회사/프로그래머의 개인 취향과 취향에 따라 상황에 따라 달라질 수 있습니다. 그런 최고의 해결책은 없습니다!

당신은 심지어 File 클래스 자체에 load 함수를 작성하도록 선택할 수 있습니다 :이에서

class File { 
public: 
    bool load(const Path& path); //non-static, or/and the next one! 
    static File load(const Path& path); //static 
}; 

을, 어쩌면, 당신은 함수의 이름을 변경하려는 것 : open()load()보다 더 나은 것 같다.

0

응용 프로그램에서 필요한 것까지입니다. 나중에 국가가 필요합니까? 또는 초기화 된 로더를 다른 곳으로 전달하여 실제로드를 수행 할 수 있습니까? 그러면 국가가 필요할 수 있습니다. 그렇지 않으면.

일반적인 "최상의"해결책은 없습니다.

1

path 정보가 알려질 때마다 다릅니다. 예를 들어 클래스에 Loader 멤버가 있지만 해당 클래스의 생성자를 호출 할 때 경로를 알지 못한다면 두 번째 접근 방법과 같이해야합니다. 이미 경로를 알고 있다면 첫 번째 방법이 더 나을 수도 있습니다.

일반적으로 모든 질문에 맞는 크기는 아닙니다.