Можно ли использовать модифицированную версию пакета параметров шаблона класса в шаблоне членов?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли использовать модифицированную версию пакета параметров шаблона класса в шаблоне членов?

Сообщение Anonymous »

Я пытаюсь написать шаблон класса с переменным пакетом параметров шаблона, который разделен на две группы аргументов. Они должны использоваться в шаблонах участников.

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

template 
class Foo {
public:
Foo(const Args&... args) :gr1{/*...*/}, gr2{/*...*/} {}
private:
template_one gr1;
template_two gr2;
};
Я придумал следующее:
сортировщик типов, который возвращает пару кортежей, содержащих отсортированные типы.

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

template 
struct type_sorter;

template 
struct type_sorter {
constexpr static auto sort() {return std::pair{}; }
};

template 
struct type_sorter {
constexpr static auto sort() {
auto ret = type_sorter::sort();

if constexpr (std::is_function_v)
return std::make_pair(std::tuple_cat(ret.first, std::tuple{}), ret.second);
else
return std::make_pair(ret.first, std::tuple_cat(ret.second, std::tuple{}));
}
};
Сортировщик параметров, который возвращает пару кортежей, содержащих как отсортированные типы, так и параметры.

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

template 
constexpr auto param_sort(Arg&& arg) {
if constexpr (std::is_function_v)
return std::make_pair(std::tuple(arg), std::tuple());
else
return std::make_pair(std::tuple(), std::tuple(arg));
}

template 
constexpr auto param_sort(Arg&& arg, Args&&... args) {
auto ret = param_sort(std::forward(args)...);

if constexpr (std::is_function_v)
return std::make_pair(std::tuple_cat(ret.first, std::tuple(arg)), ret.second);
else
return std::make_pair(ret.first, std::tuple_cat(ret.second, std::tuple(arg)));
}
В настоящее время критерием сортировки является std::is_function.
Первый можно использовать для сортировки типов без необходимости предоставления аргументов, а второй сортирует как параметры шаблона, так и аргументы. Это полезно при наличии доступа только к пакету параметров шаблона. (В области класса.)
Теперь они оба возвращают кортежи:
Я хотел бы иметь возможность извлекать пакеты параметров (Group1, Group2) из кортежей, сгенерированных сортировщиком типов, и использовать его в объявлении template_one и template_two.
Я попробовал:

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

template_one>(type_sorter::sort().second)...)
> gr1 {};
Не работает
Возможно ли такое вообще?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -pack-in-a
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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