передать шаблон с N параметрами в качестве параметра шаблона, указанного с N-1 параметрами - PullRequest
1 голос
/ 20 февраля 2020

У меня есть шаблон класса A1, который принимает параметр шаблона шаблона T.

Кроме того, у меня есть класс, например A2, который не удовлетворяет параметру шаблона шаблона A1, но с справка по using может удовлетворить ее.

Итак, вопрос в том, могу ли я в строке применить адаптированный A2 к A1? Я имею в виду что-то вроде закомментированных строк.

Как видите, это не критично, потому что я уже справляюсь с этим, но я просто спрашиваю.

template<template<int A, char B> typename T>
class A1 /* : public T<5, 'a'> */ {};

template<int A, char B, bool C> class A2{};

template<int A, char B, typename D> class A4{};

template<int A, char B>
using A3 = A2<A, B, true>;


template<int A, char B, bool C = true> class A5{};


int main()
{
    A1<A3> a;
    A1<A5> b;

    // Avoid name pollution (or other reason)
//  A1<A2<_,_,false>> c;
//  A1<A4<_,_,int>> d;
    return 0;
}

1 Ответ

1 голос
/ 20 февраля 2020

Если вам будет хорошо с написанием этого:

A1< Add_true<A2>::type > c;

Тогда вы почти у цели:

template<int A, char B>
using A3 = A2<A, B, true>;

Вместо явного написания шаблона вы можете напишите шаблон, который «использует» нужный шаблон:

template< template <int A,char B,bool> typename T>
struct Add_true {
    template <int A,char B> using type = T<A,B,true>;
};

Живой пример

Я думаю, будет просто превратить его в Add_bool, который позволяет Вы добавляете либо true, либо false. Я никогда не экспериментировал с параметрами шаблона шаблона variadi c, но думаю, что было бы интересно расширить его, чтобы "связать" произвольные параметры шаблона.

PS Мне никогда не приходило в голову, что параметры шаблона привязки настолько просты. Спасибо за вопрос:)

PPS Если ваш вопрос на самом деле был связан с true без какого-либо другого типа / функции помощника, то, насколько мне известно, это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...