Контейнеры с type erasure

std::any - контейнер, который может хранить объекты разных типов данных

int main() 
{
    std::any a = 42;
    std::cout << std::any_cast<int>(a) << std::endl;
    a = 3.14;
    std::cout << std::any_cast<double>(a) << std::endl;
    a = std::string("Hello, World!");
    std::cout << std::any_cast<std::string>(a) << std::endl;
    return 0;
}

std::variant - может хранить объекты только заданных типов данных

int main() 
{
    std::variant<int, double, std::string> v;
    v = 42;
    std::cout << std::get<int>(v) << std::endl;
    v = 3.14;
    std::cout << std::get<double>(v) << std::endl;
    v = std::string("Hello, World!");
    std::cout << std::get<std::string>(v) << std::endl;
    return 0;
}

std::function - объект функции, который может хранить функции разных типов данных

Last updated