STD :: Binde in der Initialisiererliste des KonstruktorsC++

Programme in C++. Entwicklerforum
Anonymous
 STD :: Binde in der Initialisiererliste des Konstruktors

Post by Anonymous »

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post