зачем нам универсальный тип, указанный в библиотеке Boost?Разве шаблон не достаточно?Например, если я хочу контейнер определенного типа, я бы просто сделал:
template<class Type>
vector<Type> v;
Если я хочу указать контейнер, который содержит все, я просто пишу:
vector v;
В объяснении для boost :: any (http://www.boost.org/doc/libs/1_46_1/doc/html/any/s02.html)
Преобразование типов, которые могут содержать один из нескольких возможных типов значений, например, int и string, и свободное преобразование между ними, например интерпретация 5как "5" или наоборот. Такие типы распространены в сценариях и других интерпретируемых языках. boost :: lexical_cast поддерживает такие функции преобразования.
Почему нам нужен неявный тип, как в языках сценариев, таких какPHP?
Более того, в примере boost :: any почему:
using boost::any_cast;
typedef std::list<boost::any> many;
void append_int(many & values, int value)
{
boost::any to_append = value;
values.push_back(to_append);
}
приемлемо? Использует ли контейнер оператор = реализованный в boost :: any?
any & operator=(const any &);
, что делает boost :: any способным содержать любой тип? Оператор =, определенный в boost :: any, объясняется как:
Эффекты: копирует содержимое rhs в текущий экземпляр, отбрасываяPrevious содержимое, так что новое содержимое эквивалентно по типу и значению содержимому rhs или пусто, если rhs.empty ().
Броски: std :: bad_alloc или любые исключения, возникающие из конструктора копированиясодержавшегося типа.Назначение удовлетворяет строгой гарантии исключительной безопасности.
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/any.html