这个类的三个初始化方法非常,非常非常相似。我想看看是否有办法将调用链接在一起,可能会进入需要两个参数的方法。感谢。
AudioHandler.h
class AudioHandler {
public:
static bool Initialize(const SoundLibrary& sl);
static bool Initialize(const Soundtrack& st);
static bool Initialize(const SoundLibrary& sl, const Soundtrack& st);
static void Release();
private:
static const SoundLibrary* _sl;
static const Soundtrack* _st;
};
AudioHandler.cpp
bool AudioHandler::Initialize(const SoundLibrary& sl) {
if(_sl != NULL || _st != NULL) return false;
unsigned long numVoices = 0;
//If allegro is unable to initialize the sound drivers then return false.
if((numVoices = detect_digi_driver(DIGI_AUTODETECT)) == 0) return false;
if(install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL) == -1) return false;
_sl = &sl;
return true;
}
bool AudioHandler::Initialize(const Soundtrack& st) {
if(_sl != NULL || _st != NULL) return false;
if(detect_midi_driver(MIDI_AUTODETECT) == 0) return false;
if(install_sound(DIGI_NONE, MIDI_AUTODETECT, NULL) == -1) return false;
_st = &st;
return true;
}
bool AudioHandler::Initialize(const SoundLibrary& sl, const Soundtrack& st) {
if(_sl != NULL || _st != NULL) return false;
unsigned long numVoices = 0;
if((numVoices = detect_digi_driver(DIGI_AUTODETECT)) == 0) return false;
if(detect_midi_driver(MIDI_AUTODETECT) == 0) return false;
if(install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) == -1) return false;
_sl = &sl;
_st = &st;
return true;
}
void AudioHandler::Release() {
_sl = NULL;
_st = NULL;
remove_sound();
}
答案 0 :(得分:3)
NULL
以获取您不需要的参数。NULL
。PS:在您当前的版本中,将传递的引用的地址存储在对象中并不是一个好主意。
答案 1 :(得分:0)
这些功能非常短,所以我不得不怀疑修改代码是否值得花时间或精力。但我可能也想这样做。您可以创建另一个私有函数,其他三个调用某些参数来执行它们共有的所有操作。这样,常见的操作就在一个地方。这取决于你是否值得。如果你担心未来的维护,那就去吧。