Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файл<LICENSE_1_0.txt>или копию по адресуhttp://www.boost.org/LICENSE_1_0.txt)
Бывают случаи, когда общее (в смыслеобщеев отличие отшаблонное программирование)Тип необходим: переменные, которые действительно переменные, вмещающие значения многих других более конкретных типов, а не нормальных строгих и статических типов C++. Можно выделить три основных вида родового типа:
Преобразующие типы, которые могут содержать один из нескольких возможных типов значений, например<int>и<string>, и свободно конвертировать между ними, например, интерпретируя<5>как<"5">или наоборот. Такие типы распространены в скриптинге и других интерпретируемых языках.<boost::lexical_cast>поддерживает такую конверсионную функциональность.
Дискриминированные типы, которые содержат значения различных типов, но не пытаются преобразования между ними, т.е.<5>строго как<int>и не являются неявно конвертируемыми ни в<"5">, ни в<5.0>. Их безразличие к интерпретации, но осведомленность о типе эффективно делает их безопасными, универсальными контейнерами с единичными значениями, без каких-либо сюрпризов от неоднозначных преобразований.
Неизбирательные типы, которые могут относиться к чему угодно, но не обращают внимания на фактический базовый тип, поручая все формы доступа и интерпретации программисту. В этой нише доминирует<void *>, что предлагает множество возможностей для удивительного, неопределенного поведения.
Класс<boost::any>(на основе одноимённого класса, описанного в"Valued Conversions"Кевлином Хенни,C++ Report12(7), июль/август 2000) является вариантным типом значений, основанным на второй категории. Он поддерживает копирование любого типа стоимости и безопасное извлечение этого значения строго по отношению к его типу. Аналогичная конструкция, предлагающая более подходящие операторы, может быть использована для обобщенного функционального адаптера,<any_function>, обобщенного адаптера итератора,<any_iterator>и других типов объектов, которые нуждаются в однородной обработке во время выполнения, но поддерживают только соответствие шаблона шаблона времени компиляции.