如何从概念中检索类型?
How to retrieve type from the concept?
说我有一个概念:
template < typename Group > concept bool GGroup =
requires() { typename Group::Inner; };
在使用缩写形式的概念时如何检索类型 Inner
?
void doSomething(const GGroup& group)
{
// an ugly alternative
using Inner = typename std::decay_t<decltype(group)>::Inner;
//// could be something like:
// using Inner = GGroup::Inner;
// or
// using Inner = underlyingtype(GGroup)::Inner;
}
Concepts TS 缩写形式的内在缺点是您不能只命名概念化参数的类型名称。您必须使用 decltype
才能获得它。
因此您需要权衡:您可以避免在实际代码中以更多 decltype
为代价进行明确的 template
声明,或者您可以避免 decltype
在显式模板声明的开销。
说我有一个概念:
template < typename Group > concept bool GGroup =
requires() { typename Group::Inner; };
在使用缩写形式的概念时如何检索类型 Inner
?
void doSomething(const GGroup& group)
{
// an ugly alternative
using Inner = typename std::decay_t<decltype(group)>::Inner;
//// could be something like:
// using Inner = GGroup::Inner;
// or
// using Inner = underlyingtype(GGroup)::Inner;
}
Concepts TS 缩写形式的内在缺点是您不能只命名概念化参数的类型名称。您必须使用 decltype
才能获得它。
因此您需要权衡:您可以避免在实际代码中以更多 decltype
为代价进行明确的 template
声明,或者您可以避免 decltype
在显式模板声明的开销。