このクラスの3つの初期化メソッドは非常に非常によく似ています。私は両方の引数を必要とするメソッドに潜在的に一緒に呼び出しをチェーンする方法があるかどうかを確認したいと思います。ありがとう。私はそれが時間やコードを変更するための努力の価値があるかどう疑問があるのでC++:メソッド自体を繰り返します。 DRYの最適化が必要
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();
}
名前空間ではないのはなぜですか? –
定数参照のアドレスを格納することは非常に危険です。関数呼び出しの後にオブジェクトが実際に存在するかどうかはわかりません。 –
@KerrekSBネームスペースとは何でしょうか? – Casey