我应该让我自己的框架,结束了STL类和/或Boost库,这样,如果我需要改变字符串,向量,列表等的执行或我需要编写函数,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 */ }

我是重新发明轮子太多?

我会使用的 MyFx ::字符串在UI和其他层之间的UI界面。

有帮助吗?

解决方案

在我看来,就像不会有一个很大的好处这一点;在我的经验中,的使用这些框架的就是让你不要去重新发明轮子。如果你发现你需要编写一个新的字符串类或一个新的向量类,你应该想想真的很难一下,并确保你不只是做别的事情是错误的。我不是说从未有一个理由去写自己的字符串类,我只是说这是罕见的。鉴于这种情况,我将直接使用所需的框架建议只是。

关于转换功能,相信编译器将看不到你的ToCString功能的任何不同于它会看到这一点:

CString ToCString( const std::string & ) {...}

这是因为C ++的typedef不创建新的类型,只是一个别名现有类型。

<强>再认识

我觉得你在这里表达的关注是很自然的,我知道它已经出现在我的团队多次。然而,我想答案是仍如上所述。

虽然STL类有可能不是完美的,他们被很聪明的人,谁把相当多的心思任务而设计的。因此,你需要写一个完整的替换字符串类的几率是非常小的。此外,没有任何打算轻微,它会带你(或我)很长一段时间来实现一个强大的通用串类,可以适当替换的std :: string。

另一种可能的方法来思考这将是这样的:你会考虑在Java或C#“代替” String类?我想答案显然存在“没有”,虽然有可能在您使用其他的东西比一个字符串来表示的字符序列偶尔有限的区域。同样的事情放在这里:的std :: string是接近C ++到达一个内置的字符串类,你几乎肯定不需要更换

其他提示

“我是重新发明轮子太多了?” - 是的。不这样做。

  

我应该让我自己的框架?

嗯...没有

我不会真的担心更换的std ::向量,直到有一个企业需要做,因为的 YAGNI

“这取决于” - 如果你认为这很可能是你可能在其他一些库/库(由于移植到其他平台,例如)未来的变化,然后作出一个框架,以满足您的需求,但要它的外观,薄和简单越好

这是一个时间/风险的权衡决定,只有你可以使

参见: https://stackoverflow.com/questions/22795/当对名义上 - 构建 - 你自己的编译器,也许更有趣的是乔尔的文章,引发了一个问题:的中未-此处发明综合征的防御。

但简短的回答是:没有一个该死的好理由。

在受益最大的将是学习经验,你会获得。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top