Я создаю контейнер, используя перечисления в качестве индексов. Но я не могу найти способ инициализации основного массива, который сохраняет неявные преобразования. Вот код: < /p>
#include
#include
#include
template
class EnumArray
{
static constexpr int size_v = (1 * ... * static_cast(Enums::count));
public:
EnumArray(std::initializer_list const list) : m_data{list} {} // Please fix this line
public:
T &at(Enums... indexes) { return m_data[index(indexes...)]; }
private:
template
static int index(CurrentEnum i) { return static_cast(i); }
template
static int index(CurrentEnum i_0, SubEnums... i_n) { return index(i_0) + static_cast(CurrentEnum::count) * index(i_n...); }
private:
std::array m_data;
};
namespace veryComplex
{
class ObjectThatIDontWantToCopyAgainAndAgain
{
public:
ObjectThatIDontWantToCopyAgainAndAgain(ObjectThatIDontWantToCopyAgainAndAgain const&) = delete; // in case that was unclear
ObjectThatIDontWantToCopyAgainAndAgain(int x) : m_x(x) {} // Conversion constructor
public:
int value() const { return m_x; }
private:
int m_x;
};
}
enum class K { k1, k2, count };
enum class R { r1, r2, r3, count };
int main(int argc, char** argv)
{
EnumArray myArray = {11,12,21,22};
std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... conversion
Инициализация std :: массив в функции шаблона с неявным преобразованием [дублировать] ⇐ C++
Программы на C++. Форум разработчиков
1755794871
Anonymous
Я создаю контейнер, используя перечисления в качестве индексов. Но я не могу найти способ инициализации основного массива, который сохраняет неявные преобразования. Вот код: < /p>
#include
#include
#include
template
class EnumArray
{
static constexpr int size_v = (1 * ... * static_cast(Enums::count));
public:
EnumArray(std::initializer_list const list) : m_data{list} {} // Please fix this line
public:
T &at(Enums... indexes) { return m_data[index(indexes...)]; }
private:
template
static int index(CurrentEnum i) { return static_cast(i); }
template
static int index(CurrentEnum i_0, SubEnums... i_n) { return index(i_0) + static_cast(CurrentEnum::count) * index(i_n...); }
private:
std::array m_data;
};
namespace veryComplex
{
class ObjectThatIDontWantToCopyAgainAndAgain
{
public:
ObjectThatIDontWantToCopyAgainAndAgain(ObjectThatIDontWantToCopyAgainAndAgain const&) = delete; // in case that was unclear
ObjectThatIDontWantToCopyAgainAndAgain(int x) : m_x(x) {} // Conversion constructor
public:
int value() const { return m_x; }
private:
int m_x;
};
}
enum class K { k1, k2, count };
enum class R { r1, r2, r3, count };
int main(int argc, char** argv)
{
EnumArray myArray = {11,12,21,22};
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79742541/initializing-stdarray-in-template-function-with-implicit-conversion[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия