我是否应该通过包装 STL 类和/或 Boost 库来创建自己的框架,以便在我需要更改字符串、 vector 、列表等的实现时,或者我需要编写 MFC 或其他其他函数库甚至其他平台需要使用它们的格式,我可以轻松地改变它们以满足标准。这就是我的想法。
// In my framework:
namespace MyFX {
typedef std::string String;
};
// Port specific (MFC in this case)
CString ToCString(const MyFx::String &str) { /* magic */ }
// Port specific (.NET specific)
System::String^ ToManagedString(const MyFx::String &str) { /* magic */ }
我是不是重复造轮子太多了?
我会在 UI 和其他层之间的 UI 界面中使用 MyFx::String。
最佳答案
在我看来,这不会有太多好处;根据我的经验,使用这些框架的目的是,这样您就不会重新发明轮子。如果您发现您需要编写一个新的字符串类或一个新的 vector 类,您应该认真考虑一下,并确保您不只是做错了什么。我并不是说没有理由编写自己的字符串类,我只是说这种情况很少见。鉴于此,我建议直接使用所需的框架。
关于转换函数,我相信编译器对您的 ToCString 函数的看法与它对这个函数的看法不会有任何不同:
CString ToCString( const std::string & ) {...}
这是因为 C++ typedef 不会创建新类型,而只是现有类型的别名。
进一步思考
我认为你在这里表达的担忧是很自然的,我知道我的团队中已经多次出现这种担忧。不过,我想答案还是如上所说。
虽然 STL 类可能并不完美,但它们是由非常聪明的人设计的,他们在任务中投入了很多心思。因此,您需要编写一个完整的替换字符串类的可能性非常小。此外,并且无意间,您(或我)将花费很长时间来实现一个可以适当替换 std::string 的健壮的通用字符串类。
另一种可能的思考方式是:您会考虑“替换”Java 或 C# 中的 String 类吗?我认为答案显然是“不”,尽管偶尔可能会在有限的区域使用 String 以外的东西来表示字符序列。同样的事情发生在这里:std::string 与 C++ 中的内置字符串类一样接近,您几乎可以肯定不需要替换它。
关于c++ - 我应该制作自己的框架吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/473915/