dd;
template <class T, uint8_t N>
constexpr Mm(const T (&array)[N]) noexcept
{
ss=N;
dd=(int)&array;
}
}
uint8_t ee[100];
Mm mm(ee);
В церковь сходи, заручись Божьей помощью и кастуй к int.
да нет, я хочу в конструктор передавать любой тип. Как это сделать?
template <typename T> class X { X(T t); };
конструктор не может быть шаблонным
Может... Только он должен мочь инферить свои параметры шаблона сам, так как их указать явно нельзя Вот первый пришедший на ум пример: https://github.com/microsoft/STL/blob/39332e104d5274b8b1f48ebe380ba1dfc7ce4cc0/stl/inc/memory#L1508
а потом его вызывать вот так придётся ? uint8_t ee[100]; X<uint8_t>(ee) ; а я хочу чтобы так было: uint8_t ee[100]; X(ee); без всяких угловых скобок. ведь при использовании std::size_t в С++17 мы не пишем же угловые скобки, а делаем просто так: uint8_t ee[100]; int s=std::size(ee); в нём такой конструктор используется, но это функция: template <class T, std::size_t N> constexpr std::size_t size(const T (&array)[N]) noexcept;
В C++ массив недообъект, его нельзя скопировать, не обернув в структуру. Поэтому замени массив на std::array
Обсуждают сегодня