Привет.
Прочитав здесь о шаблоне Service Locator, я подумал, действительно ли класс, в котором есть только статические члены, действительно подходит, или если нормальное c-подобное взаимодействиене будет более подходящим.Я вижу людей, которые бегают вокруг ключевого слова class
все время, когда оно им даже не нужно.
Пример со статическим классом членов, взятым со связанной страницы:
class Locator
{
public:
static IAudio* GetAudio() { return service_; }
static void Register(IAudio* service)
{
service_ = service;
}
private:
static IAudio* service_;
};
Вот как можносделайте это тоже:
// in .h
namespace Locator{
IAudio* GetAudio();
void Register(IAudio* service);
}
// in .cpp
namespace Locator{
namespace {
IAudio* service_;
}
IAudio* GetAudio() {
return service_;
}
void Register(IAudio* service) {
service_ = service;
}
}
Оба примера можно назвать точно так же, как Locator::GetAudio()
и Locator::Register(...)
.Одно из вышеперечисленного превосходит другое?Они одинаковы?Есть, может быть, лучшие способы сделать это?Или это просто личные предпочтения?Спасибо за любую помощь.:)