Программист Василий и Singleton
Для некоторой операционной системы для управления громкостью звука в системе используется класс Sound.
Чтобы не было конфликтов в системе, экземпляр этого класса должен быть уникальным.
Программисту Василию поручили решить задачу, но он напился и в пьяном угаре смог только запустить IDE.
Осторожно столкнув Василия на пол, укройте его одеялом и напишите класс.
Класс должен содержать:
- публичную функцию instance, возвращающую указатель на экземпляр;
- публичные функции setVolume(const size_t &) и getVolume() для управления громкостью звука;
- публичные функции setDevice(const Device &device) и getDevice() для управления устройствами воспроизводящими звук.
Уровень громкости по умолчанию равен нулю.
template<class Device>
class Sound {
public:
static std::shared_ptr<Sound> instance() {
if (sound_ == nullptr) {
sound_ = std::make_shared<Sound>(Sound());
}
return sound_;
}
void SetVolume(const size_t &volume) {
volume_ = volume;
}
size_t GetVolume() const {
return volume_;
}
void SetDevice(const Device &device) {
device_ = device;
}
Device GetDevice() const {
return device_;
}
private:
explicit Sound() : volume_(0) {}
static std::shared_ptr<Sound> sound_;
size_t volume_;
Device device_;
};
template<class Device>
std::shared_ptr<Sound<Device>> Sound<Device>::sound_ = nullptr;