Информация об изменениях

Сообщение Re: Шаблоны и вывод типа от 04.04.2021 22:05

Изменено 04.04.2021 22:47 rg45

Re: Шаблоны и вывод типа
Здравствуйте, SaZ, Вы писали:


SaZ>Вопрос: как ещё можно положить результат вызова make_object() в поле класса?


"Лобовой" вариант, который первым приходит в голову — использование частичной специализации:

http://coliru.stacked-crooked.com/a/b339dd1e1fc1a139

#include <tuple>
#include <type_traits>

//------
auto make_object()
{
    return std::make_tuple(1, 2.0, "3"); // Тут возвращается достаточно сложный тип, основанный на вариадиках, не суть
}

//------
template<auto>
struct storage;

template<typename R, R(*F)()>
struct storage<F>
{
    R _data{F()};
};

//------
struct object_storage
    : storage<make_object>
{};

int main()
{
    object_storage st;
}
Re: Шаблоны и вывод типа
Здравствуйте, SaZ, Вы писали:


SaZ>Вопрос: как ещё можно положить результат вызова make_object() в поле класса?


"Лобовой" вариант, который первым приходит в голову — использование частичной специализации:

http://coliru.stacked-crooked.com/a/b339dd1e1fc1a139

#include <tuple>

//------
auto make_object()
{
    return std::make_tuple(1, 2.0, "3"); // Тут возвращается достаточно сложный тип, основанный на вариадиках, не суть
}

//------
template<auto>
struct storage;

template<typename R, R(*F)()>
struct storage<F>
{
    R _data{F()};
};

//------
struct object_storage
    : storage<make_object>
{};

int main()
{
    object_storage st;
}