Как я могу ограничить аргументы параметров шаблона в последовательности «цепочки»?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу ограничить аргументы параметров шаблона в последовательности «цепочки»?

Сообщение Anonymous »

Предположим, у меня есть два класса: < /p>

Код: Выделить всё

template 
class Functor {};

template 
class Template {};
< /code>
Template
имеет ограничения:
  • Все функторы должны быть типа Functor
  • Все функтор должен быть в последовательности
    first Functor must have Start as its first argument
  • the last Functor must have End as its second argument
  • each Functor's first argument is the second Аргумент фанктора предшествует этому
e.g. Functor , Functor , Functor , ... и т. Д.


Пример:
Запуск с: char
end: long

​​ ​​

Код: Выделить всё

Template t;

Код: Выделить всё

                1         2         3         4
├─────────┼─────────┼─────────┼─────────┤
argument: char       A         B         C        long
Functor #
= 1      Functor,
2                Functor,
3                           Functor,
4                                    Functor
< /code>
 code < /h3>
namespace ns
{
template 
class Functor
{
public:
using first  = X;
using second = Y;
Functor(X lVal) : x(lVal) {}
private:
X x;
};

template 
requires(std::is_convertible_v && ...)    //error
class Template
{
// How does one use `std::is_convertible_v` on
// an un-specialized template class?
};

template 
class Template
{};
}
< /code>
Questions:
[list]
[*]What is the best approach?
[list]
Can this be done with fold expression(s)?
[*]Or concepts?
[/list]

[*]How does one use std::is_convertible
(или любая из других признаков метапрограммирования) на не эксперизованном классе шаблонов?
[/list]

Подробнее здесь: https://stackoverflow.com/questions/774 ... n-sequence
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»