c++ - 我应该制作自己的框架吗?

标签 c++ frameworks interface portability

我是否应该通过包装 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/

相关文章:

swift - Cocoapod podspec 上的预处理器标志

c# - 关于可视化 Web GUI 的建议

php - 在哪里学习 Yii?

C++ Sizeof 给出不可预测的结果

c++ - 当我运行书中的演示项目时,Directx 12 说找不到指定的路径

c# - 如何重载/替换/扩展公共(public)代码中使用的 C# 接口(interface)

java - 构造函数无法区分同一基本类型的多次出现

具有多个具有不同签名的实现类的java接口(interface)

使用 WHILE 循环的直角三角形 C++ 代码

c++ - C++中调用基类模板构造函数