Создание набора типов из списка аргументов шаблона переменной в D

У меня есть шаблонная структура следующей формы:

struct Command(T) {
    alias T CommandType;
    // ...
}

Кроме того, у меня есть еще одна структура контейнера, которая содержит кучу этих Command Структуры:

struct CommandList(Command...) {
}

Что я хотел бы сделать, это с помощью шаблонов и / или mixins создать псевдоним TypeTuple в CommandList который содержит CommandTypes, по порядку, каждого шаблона Command аргументы. Например, я бы хотел, чтобы что-то подобное произошло:

struct CommandList(Command!int, Command!long, Command!string, Command!float) {
    alias TypeTuple!(int, long, string, float) CommandListType; // This would be dynamically generated by templates/mixins...
}

Можно ли это сделать, и если да, то какой подход лучше?

1 ответ

Решение

Делает ли это то, что вам нужно?

import std.typetuple;

struct Command(T) { alias T CommandType; }
template getCommandType(T) { alias T.CommandType getCommandType; }

struct CommandList(Command...) {
    alias staticMap!(getCommandType, Command) CommandListType;
}

pragma(msg, CommandList!(Command!int, Command!long).CommandListType);
Другие вопросы по тегам