почему-то никто не упомянул, что boost :: any <> действует как тип значения, а void * - указатель.Это означает, что любой <> может хранить ЛЮБОЙ объект ЛЮБОГО размера.После сохранения вы можете передать переменную любого типа <> куда угодно;он живет сам по себе.
С другой стороны, void * имеет размер указателя, поэтому вы должны либо убедиться, что sizeof (ваши данные) <= sizeof (void *) или ваш void * простоуказатель на реальные данные, которые хранятся где-то еще.Но в этом случае он полностью отличается от любого <>, потому что теперь вам нужно беспокоиться об этом «где-то еще» и убедиться, что он остается действительным, пока действует void *, что иногда может стать проблемой, особенно в многопоточных приложениях.
Кроме того, как уже упоминалось, любой <> очень безопасен для типов, он будет хранить все, что вы захотите, но единственный способ вернуть его - узнать точный тип или он потерпит неудачу (что может быть своего родараздражает, когда один API дает вам без знака int и ваш код хочет, чтобы int обрабатывались как разные типы).void * позволит вам делать с ней все, что вы захотите, и если вы начнете читать или обрабатывать кучу и / или неинициализированную память, это не остановит вас и даже не даст вам знать, что вы делаете это.