home | help
std::any::emplace(3)	       C++ Standard Libary	    std::any::emplace(3)

NAME
     std::any::emplace - std::any::emplace

Synopsis
	template<  class  ValueType, class... Args >			     (1)
     (since C++17)
	std::decay_t<ValueType>& emplace( Args&&... args );
	template< class ValueType, class U, class... Args >
	std::decay_t<ValueType>& emplace( std::initializer_list<U>  il,      (2)
     (since C++17)
	Args&&... args );

	Changes the contained object to one of type std::decay_t<ValueType> con-
     structed from
	the arguments.

	First destroys the current contained object (if any) by reset(), then:

	1)  constructs	an  object  of type std::decay_t<ValueType>, direct-non-
     list-initialized
	from std::forward<Args>(args)..., as the contained object.
	  * This overload participates in overload resolution only if
	    std::is_constructible_v<std::decay_t<ValueType>, Args...> and
	    std::is_copy_constructible_v<std::decay_t<ValueType>> are both true.
	2) constructs an object  of  type  std::decay_t<ValueType>,  direct-non-
     list-initialized
	from il, std::forward<Args>(args)..., as the contained object.
	  * This overload participates in overload resolution only if
	    std::is_constructible_v<std::decay_t<ValueType>,	   std::initial-
     izer_list<U>&,
	    Args...>  and  std::is_copy_constructible_v<std::decay_t<ValueType>>
     are both
	    true.

Template parameters
	ValueType		-	       contained value type

Type requirements
	-
	std::decay_t<ValueType> must meet the requirements of CopyConstructible.

Return value
	A reference to the new contained object.

Exceptions
	Throws	any  exception	thrown	by  T's  constructor. If an exception is
     thrown, the
	previously contained object (if any) has been destroyed, and *this  does
     not contain
	a value.

Example
     // Run this code

      #include <algorithm>
      #include <any>
      #include <iostream>
      #include <string>
      #include <vector>

      class Star
      {
	  std::string name;
	  int id;

      public:
	  Star(std::string name, int id) : name{name}, id{id}
	  {
	      std::cout << "Star::Star(string, int)\n";
	  }

	  void print() const
	  {
	      std::cout << "Star{\"" << name << "\" : " << id << "};\n";
	  }
      };

      int main()
      {
	  std::any celestial;
	  // (1) emplace(Args&&... args);
	  celestial.emplace<Star>("Procyon", 2943);
	  const auto* star = std::any_cast<Star>(&celestial);
	  star->print();

	  std::any av;
	  // (2) emplace(std::initializer_list<U> il, Args&&... args);
	  av.emplace<std::vector<char>>({'C',  '+',  '+',  '1',  '7'} /* no args
     */);
	  std::cout << av.type().name() << '\n';
	  const auto* va = std::any_cast<std::vector<char>>(&av);
	  std::for_each(va->cbegin(), va->cend(), [](char const& c) {  std::cout
     << c; });
	  std::cout << '\n';
      }

Possible output:
      Star::Star(string, int)
      Star{"Procyon" : 2943};
      St6vectorIcSaIcEE
      C++17

See also
	constructor   constructs an any object
		      (public member function)
	reset	      destroys contained object
		      (public member function)

http://cppreference.com 	   2024.06.10		    std::any::emplace(3)

home | help