Size: a a a

2021 March 16

N

Neargye in pro.cxx
Либо я не совсем верно понял что нужно(
источник

KO

Konstantin Osipov in pro.cxx
In Dev
Нет, здесь RVO, нет ни мува, ни копирования
Если запретить move конструктор, она же не сработает, так? То есть формально это move.
источник

ID

In Dev in pro.cxx
Konstantin Osipov
Если запретить move конструктор, она же не сработает, так? То есть формально это move.
В 17-м стандарте будет работать и без мув-конструктора
источник

N

Neargye in pro.cxx
Konstantin Osipov
Если запретить move конструктор, она же не сработает, так? То есть формально это move.
это не мув, можно все запретить и сработает
источник

D

Danya in pro.cxx
Konstantin Osipov
Добрый день. Снова вопрос про fold expressions. Вот есть такая функция: template <size_t N>                                                            
std::array<Server, N>                                                          
create_cluster() {                                                              
       return std::array<Server, N>();                                        
}    
На самом деле хочется сконструировать экземпляры Server нетривиальным способом, то есть передать в конструктор std::array initializer_list. Правильно я понимаю, что наиболее прямолинейным способом это сделать будет определить лямбду, которая будет конструировать индивидуальный объект Server, завернуть эту лямбду в fold expression и передать в initializer list?
template <typename Func, std::size_t... Indices>
std::array<Server, N> create_cluster_impl(Func&& create_server_func, std::index_sequence<Indices...>)
{
    return { create_server_func(Indices)... };
}

template <typename Func, std::size_t N>
std::array<Server, N> create_cluster(Func&& create_server_func)
{
   return create_cluster_impl(std::forward<Func>(create_server_func), std::make_index_sequence<N>());
}
источник

D

Danya in pro.cxx
Danya
template <typename Func, std::size_t... Indices>
std::array<Server, N> create_cluster_impl(Func&& create_server_func, std::index_sequence<Indices...>)
{
    return { create_server_func(Indices)... };
}

template <typename Func, std::size_t N>
std::array<Server, N> create_cluster(Func&& create_server_func)
{
   return create_cluster_impl(std::forward<Func>(create_server_func), std::make_index_sequence<N>());
}
Что-то такое хочется?
источник

D

Danya in pro.cxx
create_server_func принимает индекс сервера в массиве и возвращает сервер
источник

D

Danya in pro.cxx
По идее работать должно
источник

KO

Konstantin Osipov in pro.cxx
Danya
template <typename Func, std::size_t... Indices>
std::array<Server, N> create_cluster_impl(Func&& create_server_func, std::index_sequence<Indices...>)
{
    return { create_server_func(Indices)... };
}

template <typename Func, std::size_t N>
std::array<Server, N> create_cluster(Func&& create_server_func)
{
   return create_cluster_impl(std::forward<Func>(create_server_func), std::make_index_sequence<N>());
}
да
источник

KO

Konstantin Osipov in pro.cxx
да, видимо будет работать, но очень тяжеловесно...
источник

D

Dmitriy in pro.cxx
Danya
template <typename Func, std::size_t... Indices>
std::array<Server, N> create_cluster_impl(Func&& create_server_func, std::index_sequence<Indices...>)
{
    return { create_server_func(Indices)... };
}

template <typename Func, std::size_t N>
std::array<Server, N> create_cluster(Func&& create_server_func)
{
   return create_cluster_impl(std::forward<Func>(create_server_func), std::make_index_sequence<N>());
}
Мне кажется, смысла в forward при N>1 нет
источник

D

Danya in pro.cxx
Dmitriy
Мне кажется, смысла в forward при N>1 нет
На всякий случай
источник

D

Danya in pro.cxx
Я тоже думал об этом пока писал и хз как правильно
источник

D

Danya in pro.cxx
Konstantin Osipov
да, видимо будет работать, но очень тяжеловесно...
Почему?
источник

N

Neargye in pro.cxx
Danya
Почему?
потому что много шаблонов наверное
источник

KO

Konstantin Osipov in pro.cxx
букв много, тупо, да
источник

D

Danya in pro.cxx
Ну если хочется делать это в компайл тайме, то другого выхода нет
источник

D

Dmitriy in pro.cxx
Danya
Я тоже думал об этом пока писал и хз как правильно
Либо const Ty&, либо выпендриться с хитрой специализацией где-нибудь внутри
источник

D

Danya in pro.cxx
Может в С++20 поэлегантнее решения есть, но я хз
источник

ID

In Dev in pro.cxx
А что-то вроде
template<size_t N, typename ... Args>
std::array<Server, N>
create_cluster(Args && ... args)
{
   return std::array<Server, N>(Server(std::forward<Args>(args)), ...);
}

Нельзя?
источник