Почему вы думаете, что вам нужен макрос для этого? Это должно работать:
// Beware, brain-compiled code ahead!
template< typename T, std::size_t sz >
inline void init(T (&array)[sz])
{
std::fill( array, array+sz, T() );
}
Я бы ожидал, что моя реализация std lib оптимизирует std::fill()
для вызова std::memset()
(или чего-то подобного) самостоятельно, если T
это позволяет.
Обратите внимание, что это фактически не обнуляет элементы, но использует объект, созданный по умолчанию для инициализации. Это достигается одинаково для всех типов, которые могут быть обнулены, плюс работает со многими типами, которые не могут.