Size: a a a

2020 June 26

АК

Александр Караев... in pro.cxx
чем std::array не устроил?
источник

v

vehlwn in pro.cxx
vient
Добрый день
Такой вопрос: реально ли сделать шаблонный массив, чтобы на нём работал sizeof?
Конкретно ситуация такая:
я в классе объявляю
template<typename T> inline static T array[];
inline static int array[1] = {0};
и дальше в методе класса на строку
sizeof(array<int>)
вижак (последний, в режиме C++17) говорит, что размер неизвестен, и это невалидный аргумент для sizeof
Иди в чат по джаваскрипту.
источник

v

vient in pro.cxx
Александр Караев
чем std::array не устроил?
я его и не пробовал, просто непонятно, почему это не работает
источник

v

vehlwn in pro.cxx
vient
я его и не пробовал, просто непонятно, почему это не работает
Потому что не существует симассивов без размера в плюсах.
источник

АК

Александр Караев... in pro.cxx
vient
я его и не пробовал, просто непонятно, почему это не работает
template<typename T> inline static T array[]; потому что это - невалидная конструкция (где размер?)
источник

v

vient in pro.cxx
Александр Караев
template<typename T> inline static T array[]; потому что это - невалидная конструкция (где размер?)
получается, шаблонные переменные нельзя так использовать, для объявления шаблонного массива, у которого будет разная длина для разных типов?
источник

АК

Александр Караев... in pro.cxx
vient
получается, шаблонные переменные нельзя так использовать, для объявления шаблонного массива, у которого будет разная длина для разных типов?
можно, но нужно вынести размер в шаблон
источник

АК

Александр Караев... in pro.cxx
template <typename T, std::size_t N>
using array = T[N];

inline static array<int, 1> = { 0 };

или сразу inline static std::array<int, 1> = { 0 };
источник

AD

Andrey Davydov in pro.cxx
vient
Добрый день
Такой вопрос: реально ли сделать шаблонный массив, чтобы на нём работал sizeof?
Конкретно ситуация такая:
я в классе объявляю
template<typename T> inline static T array[];
inline static int array[1] = {0};
и дальше в методе класса на строку
sizeof(array<int>)
вижак (последний, в режиме C++17) говорит, что размер неизвестен, и это невалидный аргумент для sizeof
Наверное, вы хотели сделать так: https://gcc.godbolt.org/z/36JDdo
источник

v

vient in pro.cxx
Andrey Davydov
Наверное, вы хотели сделать так: https://gcc.godbolt.org/z/36JDdo
действительно, так работает, спасибо
источник

v

vient in pro.cxx
vient
Добрый день
Такой вопрос: реально ли сделать шаблонный массив, чтобы на нём работал sizeof?
Конкретно ситуация такая:
я в классе объявляю
template<typename T> inline static T array[];
inline static int array[1] = {0};
и дальше в методе класса на строку
sizeof(array<int>)
вижак (последний, в режиме C++17) говорит, что размер неизвестен, и это невалидный аргумент для sizeof
в итоге так получилось
// .h
class A { ...
   template<typename T> static T array[];
   template<> static int array<int>[2];
   template<> static short array<short>[3];
...}

// .cpp
template<> int A::array<int>[] = { 1, 2 };
template<> short A::array<short>[] = { 3, 4, 5 };
источник

v

vehlwn in pro.cxx
vient
в итоге так получилось
// .h
class A { ...
   template<typename T> static T array[];
   template<> static int array<int>[2];
   template<> static short array<short>[3];
...}

// .cpp
template<> int A::array<int>[] = { 1, 2 };
template<> short A::array<short>[] = { 3, 4, 5 };
Ты открыл std::array или std::conditional? Почему тут пустой массив?
источник

v

vient in pro.cxx
не очень понял вопрос, там определено два массива для двух типов, они не пустые
источник

ПК

Побитый Кирпич... in pro.cxx
vient
в итоге так получилось
// .h
class A { ...
   template<typename T> static T array[];
   template<> static int array<int>[2];
   template<> static short array<short>[3];
...}

// .cpp
template<> int A::array<int>[] = { 1, 2 };
template<> short A::array<short>[] = { 3, 4, 5 };
Ты так и не пояснил почему ты тут std::array не юзаешь
источник

v

vient in pro.cxx
просто руки не дошли до него, раз с обычным массивом заработало
а есть какая-то существенная разница?
источник

v

vient in pro.cxx
проблема же была не в виде массива, а в том, что я неправильно использовал шаблоны
источник

D

Danya in pro.cxx
vient
просто руки не дошли до него, раз с обычным массивом заработало
а есть какая-то существенная разница?
В том, чтобы не писать свои велосипеды?
источник

ПК

Побитый Кирпич... in pro.cxx
vient
просто руки не дошли до него, раз с обычным массивом заработало
а есть какая-то существенная разница?
Есть конечно - он строго лучше С массива
источник

v

vient in pro.cxx
Danya
В том, чтобы не писать свои велосипеды?
обычный массив это велосипед теперь? я просто не в курсе трендов в С++
источник

ПК

Побитый Кирпич... in pro.cxx
vient
обычный массив это велосипед теперь? я просто не в курсе трендов в С++
Да, если не юзаешь std, то велосипед)
источник