Is it possible to create a template alias?

后端 未结 1 1142
北海茫月
北海茫月 2021-02-19 11:08

Consider the following code:

template< template< typename ... > class ... Ts >
struct unite
{
    template< typename ... T >
    struct type
           


        
相关标签:
1条回答
  • 2021-02-19 11:11

    No, you cannot.

    using can "return" a type, or a variable. It cannot "return" a template. There are no similar mechanisms elsewhere.

    You can do something vaguely useful by taking the convention that all templates are not templates, but rather classes with a template<?>using apply=?; alias inside them (and while we are at it, constants are std::integral_constants<T,?>, and pointers are pointer_constant<T*,?>).

    Now everything is a class. templates become just kinds of classes (with a ::apply<?...>.

    Applying a bundle of types to such a template would be done via:

    template<class Z, class...Ts>
    using apply_t = Z::template apply<Ts...>;
    

    So with a "native" template Z, you'd do Z<Ts...>. With these "indirect" templates, you'd do apply_t<Z, Ts...>.

    With this convention, a template using alias can return an indirect template. If the rest of your code follows the convention of always calling apply_t to apply a template, and you indirect-ize all other templates you write, we are done.

    This is ugly.

    0 讨论(0)
提交回复
热议问题