标题有点用词不当,我的意思是“C with classes”。
让我解释一下,最近我买了一本书 ShaderX7,它附带了 Unigine 引擎的精简版(和旧版)副本,用于其中一篇关于阴影贴图技术的文章。
当我意识到,虽然作者使用 C++ 和继承以及所有 C++ 优点时,我正在涉足代码,但大多数(如果不是全部)方法内容本质上是 C 风格的代码;例如:
int Shader::get_param(const char *name,char *src,String &dest) const {
char *s = src;
int size = (int)strlen(name);
while(*s) {
if(!strncmp(s,name,size)) {
if((s == src || strchr("\n\r",*(s - 1))) && strchr(" \t",*(s + size))) {
src = s;
s += size;
dest.clear();
while(*s && strchr(" \t",*s)) s++;
while(*s && strchr(" \t\n\r",*s) == NULL) dest += *s++;
if(dest.isEmpty()) {
Log::error("Shader::get_param(): can't get \"%s\" \n",name);
return 0;
}
memmove(src,s,strlen(s) + 1);
return 1;
}
}
s++;
}
return 0;
}
我并不是说这很糟糕,它完成了工作,这才是最重要的,但我更习惯于 C++ 风格的构造,包括 std::string、vectors 等......而且我大量使用了 Boost 库;所以这种风格让我有点意外。
使用这种代码真的比使用通用的 OO 方式更好/更快吗?
我是不是掉进了“太多抽象”的陷阱?
编辑:更正方法名称以明确它在做什么。