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 МБ.

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