Получить все типы шаблонов переменных из структуры, которая является параметром типа в шаблоне функции - PullRequest
1 голос
/ 20 апреля 2019

Вот минимальный пример:

template<typename ...Types>
struct Pack {};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (std::is_constructible_v
            </*do something to archive all types in every TemplateTemplateType*/> 
            and ... and true);
}

struct Empty{};

int main()
{
    std::cout << std::boolalpha << AllConstructible<Pack<int, const int&>, Pack<Empty>>();
}

Функция AllConstructible вернет true, если все is_constructible_v<Pack's Types> удерживают true.

Легко достичь всех типов внутри определения Pack (просто используйте Types...), но как это сделать снаружи?

1 Ответ

2 голосов
/ 20 апреля 2019

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

template<typename ...Types>
struct Helper;

template<typename ...Types>
struct Helper<Pack<Types...>>
{
    static constexpr bool value{std::is_constructible_v<Types...>};
};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (Helper<TemplateTemplateTypes>::value and ... and true);
}
...