有很多C++类库,无论是开源的还是商业的,例如MFC,ATL,SmartWin++,
QT。但是它们都没有.NET框架类库的设计,体系结构和纯度。关于实现类似于.NET框架类库的C++库并为开发人员提供广泛功能的想法呢,当然该库将不受管理,并且将封装win32 API和COM

最佳答案

有趣的问题。但是我相信,为非托管C++重新创建.NET BCL(基类库)将是浪费时间,或者不是最佳选择。这是为什么?

  • C++语言与.NET语言完全不同。这意味着,如果您要重新编写C++的BCL,则最好尝试充分利用C++。这可能会导致框架设计完全不同:

    不需要
  • IDisposableClose方法,因为C++提供确定性的释放和对象拆解。类似于using块,但更为通用。 (相关的C++概念是范围,自动存储,RAII和智能指针类。)也就是说,在这方面,C++ BCL可能具有更优雅的设计。
  • C++模板与.NET泛型完全不同。 C++也没有委托(delegate)或事件(即使您可能会模仿它们)。反射,运行时类型和代码生成也无法在C++中轻松工作。最后,C++(在C++ 0x之前)不支持lambda函数。这意味着在C++中,对BCL的更现代的添加可能不得不看起来完全不同。
  • BCL中的某些东西已经过时,或者如果您今天设计了BCL,结果会大不相同。让我们接受System.Reflection。 BCL的这一部分是在引入泛型之前构建的。如果今天从头开始重写它,则很有可能反射将利用泛型,因此具有更好的类型安全性。
  • 如您所见,新的C++版本的BCL最终可能与基于它的.NET BCL完全不同。因此,您应该怀疑是否甚至有必要在.NET BCL上完全建立这样的新库。您是否甚至需要一个单一的框架,或者最终更容易开发单独的库?一种用于联网,一种用于抽象数据类型,一种用于GUI,一种用于反射等。
  • 单独的库的缺点是它们可能没有一致的API设计。因此,使用一个库的经验根本无法帮助您学习另一个API。
  • 因此,可以更轻松地维护单独的库。例如,一个人可以维护反射库,而不必与GUI库维护者协调每个 Action 。
  • 单独的库的优点是,如果找到更干净,更快速或更佳的替换方法,则可以将另一个交换。
  • 即使有人编写了C++版本的BCL,从长远来看,维护这样一个库也将花费大量资源,当您认为它应该与平台无关时,甚至更多。 Microsoft具有此功能和这些资源。你也会吗

  • 一个强大的库吸引所有东西的确是一个API的一致性,以及“每个人”都会使用它的事实。但是我认为,即使您编写了这样的C++ BCL,您也会发现很难接触到几乎所有C++程序员并将其说服到您的那个库中。

    关于c++ - 开发像设计和体系结构中的.NET框架类库这样的非托管C++库是否浪费时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4776446/

    10-12 05:24