Я пытаюсь определить структуру с помощью шаблонного метапрограммирования, но то, что я пытаюсь сделать, может потребоваться распределить по нескольким структурам вместо одной суперструктуры:
template <A, B, C>
struct ABC
{
A a;
B b;
C c;
}
Вот гибкость, которую я надеюсь достичь, так как я буду использовать генератор кода и предпочел бы не определять каждый возможный тип структуры, если это вообще возможно:
- Могут быть определены типы для A, B и C.
- a, b или c могут быть предопределенными и предварительно назначенными константами (т. Е. Const unsigned char a = 0x48;) или быть типами элементов регулярных переменных.
Общая схема такова, что в моем кодогенераторе будет числовой ввод без знака для b, c обычно будет целым числом (длиной 1-8 байт), а итоговая длина структуры будет являться результатом.
Некоторые примеры (не совсем то, что нужно, но чтобы дать представление):
struct <struct1>
{
const unsigned char a = 'A';
const unsigned short b = 0x1000;
char c[10];
}
Я не знаю достаточно о шаблонном метапрограммировании, чтобы даже начать делать это, особенно для частей a и b, где они могут быть предварительно назначены или нет.
Возможно, чтобы не усложнять ситуацию, мы можем отказаться от предположения, что я всегда буду присваивать значения A, B, C и a, а b, так что a и b могут быть константами и предварительно назначаться.
В конце эти сообщения будут преобразованы в char * и отправлены по проводам (и упакованы в байты с помощью #pragma)
Заранее спасибо за помощь!
Извините за запутанное описание проблемы. Я попытаюсь прояснить это с некоторыми примерами того, что я хотел бы достичь, используя шаблонную структуру ABC (или дополнительные структуры, определенные по мере необходимости). Эти примеры с точки зрения конечного пользователя:
typedef ABC<100, char[10]> Msg1;
приведет к эквиваленту:
struct Msg1
{
const unsigned short a = sizeof(Msg1); // sizeof(Msg1) fits in unsigned short
const unsigned char b = 100;
char[512] c;
}
Обратите внимание, что размер элементов a и b должен определяться шаблоном на основе размера Msg1 и переданного параметра 100. Это сложная часть для меня.
typedef ABC<23000, unsigned int> Msg2;
struct Msg2
{
const unsigned char a = sizeof(Msg2); // sizeof(Msg2) fits in unsigned char
const unsigned short b = 23000;
unsigned int c;
}
Надеюсь, это немного прояснит ситуацию.