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

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