Вы не можете просто конвертировать, потому что shared_array<void>
не знает, как удалить указатель void*
на массив int
.
Вы можете попробовать что-то вроде shared_array<void>(new int[rows*clmns], checked_array_deleter<int>())
, хотяЯ не проверял, что это правильно.Вам, вероятно, нужно обернуть средство удаления чем-то, что преобразует параметр в int*
.
В качестве альтернативы, поскольку все ваши типы являются POD, вы можете использовать массив char
и shared_array<char>
.Тогда нет необходимости указывать удалитель.
Кстати, вставьте здесь обычное ворчание о том, что это хитрый дизайн.Если вы ссылаетесь на вещи с помощью void*
или не используете умные указатели, то по какой-то причине вы игнорируете, что C ++ является языком статической типизации.Вы можете посмотреть на Boost.Variant, в зависимости от того, как используется ваш массив.