代码之家  ›  专栏  ›  技术社区  ›  Vahagn

如何从概念中检索类型?

  •  7
  • Vahagn  · 技术社区  · 8 年前

    假设我有一个概念:

    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;
    }
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Nicol Bolas    8 年前

    概念短形式TS的内在缺点是,您不能仅命名概念化参数的类型名。你必须使用 decltype 得到它。

    template 以牺牲更多为代价的申报 脱模 在您的实际代码中,或者您可以避免 脱模 以显式模板声明为代价。