Std :: Tie в списке инициализаторов ConstructorC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std :: Tie в списке инициализаторов Constructor

Сообщение Anonymous »

У меня есть следующий заголовок: < /p>

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

#include 
#include 

std::tuple foo(std::string_view sv);

class s {
public:
s(std::string_view sv);

private:
int x, y, z;
};
Есть ли способ реализовать s :: s , чтобы он назначал x, y, z с использованием foo в списке инициализатора? Предположим, что foo стоит дорого, поэтому не следует вызывать несколько раз, и из -за взаимозависимости между возвращенными значениями его нельзя не сломать.

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

s::s(std::string_view sv) {
std::tie(x, y, z) = foo(sv);
}
Но это не будет работать, если x, y, z были типами без конструктора по умолчанию. Одним из решений, которое я нашел, является делегирование частному конструктору: < /p>
s::s(std::string_view sv) : s{ foo(sv) } {}

s::s(const std::tuple& t) :
x{ std::get(t) },
y{ std::get(t) },
z{ std::get(t) }
{}
< /code>
Однако я нахожу это немного неэлегальным, поскольку это требует изменения заголовка с помощью детали реализации. Есть ли другие решения этой проблемы?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Std :: Tie в списке инициализаторов Constructor
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Использование лямбда-функции в конструкторе constexpr с std::tie
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Идиоматические способы использования кортежей и std::tie
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Идиоматические способы использования кортежей и std::tie
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • `std::map<std::string, enum{1, 2, 3, 4}>` (или std::map<std::string, tuple<bool, bool>>`) кэширует` против `std: :set<st
    Anonymous » » в форуме C++
    0 Ответы
    326 Просмотры
    Последнее сообщение Anonymous

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