std::any(3)

πŸ“¦
version 2024.07.05 Β· 4 versions
, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

Okay bestie, welcome to the std::any(3) page from the C++ Standard Library ✨. The name is literally std::any β€” std::any, and yes she’s self-titled and iconic πŸ‘‘.

🌸 Synopsis 🌸

Defined in header <any>
class any;               (since C++17)

The class any describes a type-safe container for single values of any copy constructible type. No cap πŸ’….

  1. An object of class any stores an instance of any type that satisfies the constructor requirements or is empty, and this is referred to as the state of the class any object. The stored instance is called the contained object. Two states are equivalent if they are either both empty or if both are not empty and if the contained objects are equivalent.
  2. The non-member any_cast functions provide type-safe access to the contained object.
Implementations are encouraged to avoid dynamic allocations for small objects, but such an optimization may only be applied to types for which std::is_nothrow_move_constructible returns true. fr fr, that’s the rule 🫢

✨ Member functions ✨

  • constructor β€” constructs an any object (public member function)
  • operator= β€” assigns an any object (public member function)
  • destructor β€” destroys an any object (public member function)

πŸŽ€ Modifiers πŸŽ€

  • emplace β€” change the contained object, constructing the new object directly (public member function)
  • reset β€” destroys contained object (public member function)
  • swap β€” swaps two any objects (public member function)

πŸ¦‹ Observers πŸ¦‹

  • has_value β€” checks if object holds a value (public member function)
  • type β€” returns the typeid of the contained value (public member function)

🌈 Non-member functions 🌈

  • std::swap(std::any) β€” specializes the std::swap algorithm (C++17) (function)
  • any_cast β€” type-safe access to the contained object (C++17) (function template)
  • make_any β€” creates an any object (C++17) (function template)

🧚 Helper classes 🧚

  • bad_any_cast β€” exception thrown by the value-returning forms of any_cast on a type mismatch (C++17) (class)

πŸ’œ Notes πŸ’œ

  • Feature-test macro __cpp_lib_any β†’ value 201606L, Std (C++17), feature std::any.

πŸ”₯ Example πŸ”₯

Run this code, bestie β€” the manual literally says // Run this code:

#include <any>
#include <iostream>

int main()
{
    std::cout << std::boolalpha;

    // any type
    std::any a = 1;
    std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';
    a = 3.14;
    std::cout << a.type().name() << ": " << std::any_cast<double>(a) << '\n';
    a = true;
    std::cout << a.type().name() << ": " << std::any_cast<bool>(a) << '\n';

    // bad cast
    try
    {
        a = 1;
        std::cout << std::any_cast<float>(a) << '\n';
    }
    catch (const std::bad_any_cast& e)
    {
        std::cout << e.what() << '\n';
    }

    // has value
    a = 2;
    if (a.has_value())
        std::cout << a.type().name() << ": " << std::any_cast<int>(a) << '\n';

    // reset
    a.reset();
    if (!a.has_value())
        std::cout << "no value\n";

    // pointer to contained data
    a = 3;
    int* i = std::any_cast<int>(&a);
    std::cout << *i << '\n';
}

Possible output:

int: 1
double: 3.14
bool: true
bad any_cast
int: 2
no value
3

⭐ See also ⭐

  • function β€” wraps callable object of any copy constructible type with specified function call signature (C++11) (class template)
  • move_only_function β€” wraps callable object of any type with specified function call signature (C++23) (class template)
  • variant β€” a type-safe discriminated union (C++17) (class template)
  • optional β€” a wrapper that may or may not hold an object (C++17) (class template)

mwah πŸ’‹ β€” source/version: http://cppreference.com Β· date: 2024.06.10 Β· and this whole iconic page is std::any(3) 🫢

πŸ“¦ where this page comes from