Хотелось бы получить возможность заполнять байтовое поле в классе гарантировано в компил-тайме используя человекочитаемые enum'ы и структуры. Например:
myStruct one
{
uint16_t a;
uint8_t b;
}
class Descriptor:
{
uint8_t fld[];
Descriptor(myStruct one, int two, char *three);
}
Descriptor({0xEF10,0x12},2,"ABC"}) //forms 0xEF101202414243
Как это сделать? В шаблоны не передать структуры, из констекспра не вернуть константный массив.
Может что-то типа такого:
// Example program
#include <iostream>
#include <string>
template <int v1, int v2> class descr{
int val1=v1;
int val2=v2;
public:
void print(){
std::cout<<std::endl<< "val1="<<val1;
std::cout<<std::endl<< "val2="<<val2;
}
};
int main()
{
descr<1,2> descr1;
descr<2,3> descr2;
descr1.print();
descr2.print();
return 0;
}
Проверялось на cpp.sh
Вывод программы:
val1=1
val2=2
val1=2
val2=3
Например вот так:
#include <cstdint>
#include <cstddef>
struct myStruct
{
uint16_t a;
uint8_t b;
};
class Descriptor
{
public: uint8_t fld[2 + 1 + 4 + 4];
public: constexpr
Descriptor
(
myStruct one
, int two
, char const ( & three )[4]
) noexcept
: fld
{
static_cast<uint8_t>((one.a >> 0u) bitand 0xFFu)
, static_cast<uint8_t>((one.a >> 8u) bitand 0xFFu)
, static_cast<uint8_t>(one.b)
, static_cast<uint8_t>((two >> 0u) bitand 0xFFu)
, static_cast<uint8_t>((two >> 8u) bitand 0xFFu)
, static_cast<uint8_t>((two >> 16u) bitand 0xFFu)
, static_cast<uint8_t>((two >> 24u) bitand 0xFFu)
, static_cast<uint8_t>(three[0])
, static_cast<uint8_t>(three[1])
, static_cast<uint8_t>(three[2])
, static_cast<uint8_t>(three[3])
}
{
return;
}
};
constexpr Descriptor desc{{0xEF10,0x12}, 2, "ABC"}; // инициализация во время компиляции
static_assert(desc.fld[0] == 0x10); // проверка корректности инициализации во время компиляции
static_assert(desc.fld[1] == 0xEF);
static_assert(desc.fld[2] == 0x12);
// ...
int main()
{
return 0;
}
online compiler
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Никак не могу найти, как правильно установить libpng для VS community 2017Не смог установить при помощи видео с установкой для VS 2015, так как не совпадают...
Не понимаю как QMap <int, ThreeDModelTexture*> mapTexture; передать в qmlКласс ThreeDModelTexture у меня такой :
Мне надо собрать проект C++ QtУ меня установлен llvm-8, в pro-файле указанно