概念是否减少了在头文件中定义 类 的需要?
Do concepts alleviate the need of defining classes in header files?
Bjarne Stroustrup 提到了必须在头文件中多次定义模板的缺点。
示例:https://youtu.be/HddFGPTAmtU
我现在的问题是,现在是否可以通过 C++20 中的 C++ 新概念功能解决这个问题?
我真的找不到任何关于那个的东西,Bjarne 也没有再说什么了,afaik。
概念本身并不能消除这一点,但 C++ 模块可以。 C++ 模块与概念是分开的:您可以在不使用概念的情况下使用模块。但鉴于概念鼓励创建通用代码,模块将是一个非常需要的补充。
您将能够与 #include
并排使用模块:您可以根据需要使用一个、另一个或两者。模块将显着加快代码的编译速度,并且有了模块,您甚至可以在没有头文件的情况下将模板(和概念)放入 cpp 文件中。
概念是关于约束模板和与模板相关的实体。 Concepts 没有,也从未尝试解决必须在头文件中定义模板的限制。
模块,另一方面,确实试图解决这个问题。不是通过让您在源文件中定义模板,而是通过向语言添加一个全新的封装层,并希望因此减少编译时间。但是,虽然概念已经添加到 C++20 的工作草案中,但模块还没有。看起来它可以生成 C++20,但尚不清楚是否会。走着瞧。
Bjarne Stroustrup 提到了必须在头文件中多次定义模板的缺点。 示例:https://youtu.be/HddFGPTAmtU
我现在的问题是,现在是否可以通过 C++20 中的 C++ 新概念功能解决这个问题?
我真的找不到任何关于那个的东西,Bjarne 也没有再说什么了,afaik。
概念本身并不能消除这一点,但 C++ 模块可以。 C++ 模块与概念是分开的:您可以在不使用概念的情况下使用模块。但鉴于概念鼓励创建通用代码,模块将是一个非常需要的补充。
您将能够与 #include
并排使用模块:您可以根据需要使用一个、另一个或两者。模块将显着加快代码的编译速度,并且有了模块,您甚至可以在没有头文件的情况下将模板(和概念)放入 cpp 文件中。
概念是关于约束模板和与模板相关的实体。 Concepts 没有,也从未尝试解决必须在头文件中定义模板的限制。
模块,另一方面,确实试图解决这个问题。不是通过让您在源文件中定义模板,而是通过向语言添加一个全新的封装层,并希望因此减少编译时间。但是,虽然概念已经添加到 C++20 的工作草案中,但模块还没有。看起来它可以生成 C++20,但尚不清楚是否会。走着瞧。