STD :: Binde in der Initialisiererliste des Konstruktors
Posted: 13 Apr 2025, 09:23
Ich habe einen folgenden Header: < /p>
Gibt es eine Möglichkeit, s :: s so zu implementieren, dass es in der Initializer -Liste x, y, z verwendet? Angenommen, Foo ist teuer und sollte daher nicht mehrmals aufgerufen werden. Aufgrund von Interdependenzen zwischen den zurückgegebenen Werten kann es auch nicht unterteilt werden.
Aber es würde nicht funktionieren, wenn x, y, z Typ ohne Standardkonstruktor wäre. Eine Lösung, die ich gefunden habes::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>
Ich finde es jedoch ein bisschen unelegant, da es erfordert, dass der Header mit einem Implementierungsdetail geändert wird. Gibt es andere Lösungen für dieses Problem?
Code: Select all
#include
#include
std::tuple foo(std::string_view sv);
class s {
public:
s(std::string_view sv);
private:
int x, y, z;
};
Code: Select all
s::s(std::string_view sv) {
std::tie(x, y, z) = foo(sv);
}
s::s(const std::tuple& t) :
x{ std::get(t) },
y{ std::get(t) },
z{ std::get(t) }
{}
< /code>
Ich finde es jedoch ein bisschen unelegant, da es erfordert, dass der Header mit einem Implementierungsdetail geändert wird. Gibt es andere Lösungen für dieses Problem?