|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
constexpr any()noexcept; | (1) | (since C++17) |
any(const any& other); | (2) | (since C++17) |
any( any&& other)noexcept; | (3) | (since C++17) |
template<class ValueType> any( ValueType&& value); | (4) | (since C++17) |
template<class ValueType,class...Args> explicit any(std::in_place_type_t<ValueType>, Args&&...args); | (5) | (since C++17) |
template<class ValueType,class U,class...Args> explicit any(std::in_place_type_t<ValueType>,std::initializer_list<U> il, | (6) | (since C++17) |
Constructs a newany object.
T is the type of the object contained inother.any nor a specialization ofstd::in_place_type_t, andstd::is_copy_constructible_v<std::decay_t<ValueType>> istrue.Contents |
| ValueType | - | contained value type |
| Type requirements | ||
-std::decay_t<ValueType> must meet the requirements ofCopyConstructible. | ||
| other | - | anotherany object to copy or move from |
| value | - | value to initialize the contained value with |
| il, args | - | arguments to be passed to the constructor of the contained object |
Because the default constructor isconstexpr, staticstd::anys are initialized as part ofstatic non-local initialization, before any dynamic non-local initialization begins. This makes it safe to use an object of typestd::any in a constructor of any static object.
#include <boost/core/demangle.hpp> #include <any>#include <initializer_list>#include <iostream>#include <memory>#include <set>#include <string>#include <utility> struct A{int age;std::string name;double salary; #if __cpp_aggregate_paren_init < 201902L// Required before C++20 for in-place construction A(int age,std::string name,double salary): age(age), name(std::move(name)), salary(salary){}#endif}; // Using abi demangle to print nice type name of instance of any holdingvoid printType(conststd::any& a){std::cout<< boost::core::demangle(a.type().name())<<'\n';} int main(){// Constructor #4: std::any holding intstd::any a1{7}; // Constructor #5: std::any holding A, constructed in placestd::any a2(std::in_place_type<A>,30,"Ada",1000.25); // Constructor #6: std::any holding a set of A with custom comparisonauto lambda=[](auto&& l,auto&& r){return l.age< r.age;};std::any a3(std::in_place_type<std::set<A, decltype(lambda)>>,{ A{39,std::string{"Ada"},100.25}, A{20,std::string{"Bob"},75.5}}, lambda); printType(a1); printType(a2); printType(a3);}
Possible output:
intAstd::set<A, main::{lambda(auto:1&&, auto:2&&)#1}, std::allocator<A> > assigns anany object(public member function)[edit] |