【问题标题】:Do concepts alleviate the need of defining classes in header files?概念是否减轻了在头文件中定义类的需要?
【发布时间】:2019-05-17 09:45:09
【问题描述】:

Bjarne Stroustrup 提到了必须在头文件中多次定义模板的缺点。 示例:https://youtu.be/HddFGPTAmtU

我现在的问题是,C++20 中 C++ 的新概念特性现在是否解决了这个问题?

我真的找不到任何关于这件事的信息,Bjarne 也没有再谈过这件事,afaik。

【问题讨论】:

  • 您是如何实现从概念到减少在标题中包含模板的需求的逻辑飞跃?你有一个例子吗?否则这只是一个随机猜测。
  • 我看过 Bjarne Stroustrupp 的两次关于概念的演讲,在两次演讲中都提到了这个特定的缺点。

标签: c++ c++20


【解决方案1】:

Concepts 本身并不能消除这一点,但 C++ 模块可以。 C++ 模块与概念是分开的:您可以在不使用概念的情况下使用模块。但鉴于概念鼓励创建通用代码,模块将是一个非常需要的补充。

您将能够与 #include 并排使用模块:您可以根据需要使用一个、另一个或两者。模块将显着加快代码的编译速度,使用模块,您甚至可以将模板(和概念)放入 cpp 文件中,甚至无需头文件。

【讨论】:

    【解决方案2】:

    概念是关于约束模板和与模板相关的实体。 Concepts 没有也从未尝试过解决必须在头文件中定义模板的限制。

    另一方面,模块确实试图解决这个问题。不是通过让您在源文件中定义模板,而是通过向语言添加一个全新的封装层并希望因此减少编译时间。但是,虽然概念已经添加到 C++20 的工作草案中,但模块尚未添加。看起来它可以使 C++20 成为可能,但尚不清楚它是否会。走着瞧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多