【发布时间】:2019-01-14 13:12:41
【问题描述】:
假设我有一个模板类型,例如
template<typename A, typename B, typename C>
struct mytype { };
如何编写一个概念来检查一个类型是否是该模板的实例化?
template<typename T>
concept MyType = requires(T x) { ??? }
如果不解决旧式专用检测器类型或标记基类型,我想不出一个明显的方法。
【问题讨论】:
-
不确定您到底在问什么。概念还没有在标准中,还是我错过了?
-
它们在草稿 C++20 中,所以我的问题当然是基于当前草稿
-
这个有什么用?
-
@cpplearner 这样的用例之一可能是仅对特定类型的参数进行完美转发。比 SFINAE 更好的概念 :)
-
@cpplearner 直接而明显的用途是强制类型安全,而不必经历通常的冗长模板舞蹈。也就是说,您可以直接使用
template<MyType T> do_stuff(T)而不是template<typename A, typename B, typename C> void do_stuff(mytype<A, B, C>)。希望有一天do_stuff(MyType T),正如 Stroustrup 所设想的那样。
标签: c++ c++-concepts c++20