Ослабьте приведение типов void * в C ++

В C не является ошибкой приводить указатели к void * .

Основным препятствием при переносе на C ++ является необходимость приводить указатели при возврате из функций, имеющих дело с универсальными указателями, таких как malloc , и функций, объявленных в моем собственном коде, таких как void * block_get ( Blkno const blkno); .

Однако мой код предназначен для успешной компиляции компиляторами C и C ++. Если я предоставляю явные приведения повсюду для C ++, они должны быть приведениями в стиле C, и я могу маскировать ошибки из-за приведения типов, не являющихся указателями, к типам указателей и от типов указателей на обоих языках.

Моя справочная ошибка следующая:

struct Cpfs *cpfs = calloc(1, sizeof(*cpfs));

которая в MSVC выдает:

Ошибка 2, ошибка C2440: «инициализация»: невозможно преобразовать из «void *» в «Cpfs *» e: \ src \ cpfs \ cpfs .c 179

Очевидно, я не могу использовать new или static_cast , которые я бы естественно использовал, если бы я больше не использовал C. Какой лучший способ предоставить максимальная безопасность типов окружающая void * для каждого языка с минимальной многословностью?

6
задан Matt Joiner 3 October 2010 в 10:11
поделиться