Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In C++17 eingeführt.
Die in_place_tTypen und in_place_type_tin_place_index_t Tagtypen werden verwendet, um den überladenen Konstruktor auszuwählen, der das Objekt auf die gewünschte Weise erstellt. Für die Typen, die diese Tagtypen verwenden, können sie auch dazu beitragen, temporäre Kopier- oder Verschiebungsvorgänge zu vermeiden.
Syntax
struct in_place_t
{
explicit in_place_t() = default;
};
inline constexpr in_place_t in_place{};
template <class T>
struct in_place_type_t
{
explicit in_place_type_t() = default;
};
template <class T>
constexpr in_place_type_t<T> in_place_type{};
template <size_t I>
struct in_place_index_t
{
explicit in_place_index_t() = default;
};
template <size_t I>
constexpr in_place_index_t<I> in_place_index{};
Parameter
I
Der Index, in dem das Objekt erstellt wird.
T
Der Typ des zu erstellenden Objekts.
Hinweise
in_place_tgibt die direkte Konstruktion eines Objekts an. Dient zum Erstellen von Objekten innerhalb einerstd::optional.in_place_type_tgibt die direkte Konstruktion eines Objekts eines bestimmten Typs an. Es ist nützlich,std::anydastd::anyeine beliebige Art von Typ enthalten kann, daher müssen wir den darin enthaltenen Typ angeben.in_place_index_tgibt die direkte Konstruktion eines Objekts an einem bestimmten Index an.std::variantHier können Sie den Index angeben, in dem das Objekt erstellt wird.
Die folgenden Klassentypen verwenden diese Anweisungen in ihren Konstruktoren: , , optional, , single_viewoder any variant. expected
Beispiel
#include <iostream>
#include <optional>
#include <any>
#include <variant>
// compile with /std:c++17
struct MyStruct
{
double value;
MyStruct(double v0, double v1 = 0) : value(v0 + v1) {}
};
int main()
{
// Construct a MyStruct directly inside opt
std::optional<MyStruct> opt(std::in_place, 29.0, 13.0);
// Construct a MyStruct object inside an any object
std::any a(std::in_place_type<MyStruct>, 3.14);
// Construct a MyStruct object inside a vector at index 0
std::variant<MyStruct, int> v(std::in_place_index<0>, 2.718);
if (opt)
{
std::cout << opt->value << ", ";
}
std::cout << std::any_cast<MyStruct>(a).value << ", "
<< std::get<0>(v).value;
return 0;
}
42, 3.14, 2.718
Anforderungen
Header: <utility>
Namespace:std
Compileroption: /std:c++17 oder höher.