Constexpr std :: tuple-подобная утилита, чтобы вы могли использовать ее с членами non contexpr tupleC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Constexpr std :: tuple-подобная утилита, чтобы вы могли использовать ее с членами non contexpr tuple

Сообщение Anonymous »

Было бы неплохо, если бы было что -то вроде кортежа, но на самом деле это не построило типы, но просто удерживало их как параметры шаблона, с функциями STD :: Cutle, индексация и тому подобное. Есть ли что -то вроде кортежа, которое на самом деле не нужно строить объекты? И вы делаете что -то вроде получения типа вместо объекта с помощью std :: get (Tuple). Иногда кортежи должны быть contexPR для концентрации и постоянной оценки, и это не сработает, если какие -либо члены кортежа не являются contexpr. Например, если я добавляю конструктор к одному из моих членов кортежа, он больше не компилируется. < /P>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
template 
struct BitfieldBits
{
constexpr static inline uint64_t num_bits = N;
};

struct DepthMode : BitfieldBits
{
};
struct UseCulling : BitfieldBits
{
};
struct VertexShaderID : BitfieldBits
{
};

template 
struct MyBitfield
{
uint64_t bitfield;

/* HERE, IS THERE A WAY TO HOLD THE TYPES BUT WITHOUT THE ACTUAL OBJECTS */
constexpr static inline std::tuple tuple{};

constexpr static inline std::array bit_shift_offsets = []() consteval
{

std::array arr;

auto lambda = [&] (const auto& self) consteval
{
if constexpr (idx >= sizeof ... (T))
return;

else
{// SO I CAN ACCESS IT HERE THROUGH A 'TYPE' std::get(tuple)::num_bits
arr[idx] = offset;
self.template operator() (self);
}
};

lambda.template operator()  (lambda);

return arr;

}();

};

int main(int argc, char* argv[])
{

MyBitfield my_bitfield;
constexpr auto offset = my_bitfield.bit_shift_offsets[2];

}
Кроме того, я знаю, что передача вариальных аргументов к параметрам шаблона (в качестве пакета параметров) - это как его собственный кортеж, но он ограничен, например, неспособность индексировать его.

Подробнее здесь: https://stackoverflow.com/questions/796 ... -tuple-mem
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»