C++:方法重复自身;需要DRY优化
C++: Methods repeating themselves; DRY optimization needed
这个类的三个初始化方法非常、非常、非常相似。我想看看是否有一种方法可以将调用链接在一起,可能会将调用链接到需要两个参数的方法中。谢谢
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;
};
音频处理程序.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();
}
- 仅保留第三种变体
- 更改对指针的引用
- 为不需要的参数发送
NULL
- 执行特定代码之前,请检查
NULL
PS:在您当前的版本中,将传递的引用的地址存储在对象中不是一个好主意。
这些函数都很短,所以我不得不怀疑修改代码是否值得花费时间或精力。但我可能也想这么做。您可以创建另一个私有函数,其他三个函数使用某些参数调用该函数来执行它们共同的所有操作。这样,通用操作就在一个地方。它是否值得由你决定。如果你担心将来的维护,那就去做吧。
相关文章:
- std::原子加载和存储都需要吗
- 需要帮助设置在C++中使用的Potrace
- 是否需要删除包含对象的"pair"?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- C++我需要了解在哪里使用指针和双指针
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 我需要将多个函数组合为一个函数
- 概念中的cv限定符需要表达式参数列表
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 需要从 istream 和 ostream 派生 iostream
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么您需要C++头文件的包含保护
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 需要帮助将结构数组传递给函数
- 为什么output_editor Concept不需要output_e迭代器标记
- C++:方法重复自身;需要DRY优化