我正在编写一个业余爱好项目,其中我写了.wav文件。我认为最好的方法是使用一堆例程创建一个C文件来初始化和操作一个结构,其中包含用户不应该手动操作的波形文件的元数据,而应该传递一个指向例程的指针。使用此界面的示例如下:
/* wave_new_file() implicitly allocates memory for the struct */
Wavefile *outputWave = wave_new_file("out.wav", WAVE_mono);
int i;
for (i = 0; i < MAX_RANDOM_SAMPLES; i++)
wave_write(outputWave, rand());
wave_close(outputWave);
我意识到我的设计的其余部分可以通过使用OOP方法从长远来看简化,例如在下面的伪C ++中(因为我实际上并不熟悉C ++;稍后会详细介绍) :
Wavefile *outputWave = new Wavefile("out.wav", WAVE_mono);
for (int i = 0; i < MAX_RANDOM_SAMPLES; i++)
outputWave->write(rand());
outputWave->close(); /* Or delete perhaps? */
问题在于:我的项目的其余部分是用C99编写的;我实际上并不了解C ++(我从Python学到了OOP,但我现在专注于用C编程)。
我应该:重构我的设计,不要过分依赖OOP主体,还是应该花时间学习C ++并将整个程序迁移到C ++?它不是一个大型程序,它只是一个爱好项目(这解释了我通过制作我自己的.wav写模块重新发明轮子)。或者我应该继续我目前发现自己的伪对象设计?
答案 0 :(得分:2)
C ++版本以何种方式更简单?
并不是说我不同意使用C ++的想法。我认为你会受益于轻量级的C ++习惯用法,例如使用智能指针来管理Wavefile对象的生命周期,但这并不意味着你需要完全抛弃你当前的设计。
C ++的另一个好处是它提供了更强的类型安全性,即使你的代码仍然符合C标准。
答案 1 :(得分:2)
我认为这真的归结为你的最终目标。如果你纯粹是为了一个业余爱好并且你正在开发这个用于自己的用途,那么你可能会很高兴坚持你正在做的事情。但是,如果你不只是寻找一个解决方案,而是一个解决问题的好方法,寻找新的东西,或者将其作为寻找工作的准备,那么我会更加努力地投入C ++或者潜在的与Java完全不同的语言。
代码摘要:
if(DESIRE_SHORT_TERM_PROJECT_COMPLETION){
stickWithC = true;
}else if(DESIRE_KNOWLEDGE_AND_EXPERIENCE_AND_PLAN_TO_DEVELOP_LONG_TERM){
stickWithC = false;
}
答案 2 :(得分:2)
保留C.如果需要OOP,请使用函数指针。这在Linux内核中很常见。
答案 3 :(得分:1)
这取决于。重写它的好处是否会超过重写它的不便?如果是这样,那就去做吧。如果不了解您的项目,这是我能给出的最佳答案。
另一方面,由于这是一个爱好项目,如果您正在寻找重写它的借口,或者破坏一些c ++,即使它在技术上并不是最好的利用时间如果你有兴趣了解更多关于C ++的信息,那就去吧,特别是。如果您正在寻找继续用C语言写作的借口,那就去做吧!