by Anonymous » 13 Apr 2025, 09:23
Ich habe einen folgenden Header: < /p>
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;
};
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.
Code: Select all
s::s(std::string_view sv) {
std::tie(x, y, z) = foo(sv);
}
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?
Ich habe einen folgenden Header: < /p>
[code]#include
#include
std::tuple foo(std::string_view sv);
class s {
public:
s(std::string_view sv);
private:
int x, y, z;
};
[/code]
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.[code]s::s(std::string_view sv) {
std::tie(x, y, z) = foo(sv);
}
[/code]
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?