- 论坛徽章:
- 2
|
回复 62# sonicling
关于char*与string。
1. 如果你是指string本身
这就不是我说的将C api换汤不换药的搞成C++ class了。
char*与string之间的区别,相比:
- class file {
- FILE* p_;
- public:
- ... fread(...) { return ::fread(...); }
- };
复制代码 与FILE*之间的区别,这能比吗?
我说的是后一对这种情况。
2. 如果你是指在object-based化时顺带将string作为参数。
比如:
- file::printf(std::string const& fmt, ...)
复制代码 甚至
- class file {
- public:
- static int remove(std::string const& f) { ... }
- };
复制代码 那这种所谓的objecte-based化同样没有意义,可以去除。实现一个重载并使用string作为参数就可以了。
- int remove(std::string const& f) { return remove(f.c_str()); }
复制代码 string与char*是很不相同的概念,分别使用它们作为参数的remove也是稍有区别的。
但file这种东西,真要说它和FILE*有不同,那也就是一层纸的区别。
其实就算是remove(string)这种代码,我都不太愿意做。
这种称谓"垫片"的技巧虽然用起来确实可能会很方便,但会让两个模块间交互的方式陡增且混乱。
这也是C++会被C程序员(嗯,@starwing83,我就是在说你)批评"不干净"的一个原因。
如果真要这么做,那我肯定要尽可能地 —— 文档、命名空间、不同头文件等许多方式 —— 让用户知道哪些是primitive,哪些是auxiliary。
关于线程、socket,可能性太多,若像上面那样对每种猜测都作解释就太麻烦了…… 还请明示……
|
|