Я использую boost::any
в сочетании с boost::any_cast<>
для написания кода фреймворка, который должен принимать набор аргументов, почти как вызов функции, и преобразовывать их в массив boost::any
типов.
До сих пор все работало отлично, за исключением мест, где трудно предсказать, будет ли номер, который дает мне звонящий, подписанным или неподписанным. Много кода в нашем существующем продукте (основанном на Windows) использует типы данных DWORD
и BYTE
для локальных переменных, поэтому, если используется одна из этих переменных, я получаю беззнаковый тип. Однако, если константа жестко закодирована, скорее всего, это будет простое число, и в этом случае оно будет подписано.
Так как я не могу предсказать, должен ли я делать any_cast<int>
или any_cast<unsigned int>
, в 50% случаев мой код, который читает массив boost::any
, не будет работать.
Кто-нибудь знает, есть ли способ получить только число из boost::any
независимо от того, был ли исходный тип подписанным или беззнаковым?