Как мне «развернуть» время компиляции std :: массив в пакет параметров?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне «развернуть» время компиляции std :: массив в пакет параметров?

Сообщение Anonymous »

Я хотел бы использовать специализацию частичной шаблоны, чтобы «разбить» массив (который создается во время компиляции) в пакет параметров, состоящий из его значений (для взаимодействия с другими структурами, которые я определяю в своем коде). Следующая (моя первая попытка) не компилизируется < /p>

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

#include 

template  struct K;
template  struct K {};
< /code>

Потому что аргумент шаблона std :: array  {a ...} < /code> не должен включать параметры шаблона. Как я понял, невозможно предоставить параметры без типа в специализации частичной шаблоны, если они нетривиально зависят от параметров шаблона. Следовательно, я попытался обойти эту проблему, содержав значение в типе: < /p>

#include 

template  struct any_type;

template  struct FromArr;
template 
struct FromArr {};

int main() {
FromArr d;
(void) d;
}
< /code>

Однако здесь, специализация с частичным шаблоном не удается, когда я пытаюсь его использовать; Приведенное выше определение не соответствует тому, как я его использую, и я не уверен, почему. Он не удается со следующей ошибкой: < /p>

file.cc: In function ‘int main()’:
file.cc:10:55: error: aggregate ‘FromArr d’ has incomplete type and cannot be defined
10  |   FromArr d;
< /code>

Можно ли обойти этот /использовать другой подход, чтобы интерфейс массив как пакет параметров? -std = c ++ 2a file.cc < /code>, C ++ 2a требуется, потому что я использую параметры шаблона без типа. - пакет параметров (1). Было бы неплохо, если бы я смог использовать массив (2) (который я получил в другом фрагменте моего кода в качестве аргумента шаблона без типа) для взаимодействия с этой структурой, как указано в коде ниже. < /p>

template  struct toBeUsed;                               // (1)
template  struct Consumer { // (2)
toBeUsed instance; // This is what I would like to do
}
Моя попытка состоит в том, чтобы написать вспомогательную структуру, как указано выше, от , которую я могу создать с помощью массива , в котором у меня есть Typedef fromStruct :: type , который обеспечивает Tobeed с правильными аргументами, похожими на этот пример, который я хочу делать здесь с типами:: p> comply есть. />
ссылка на пример < /h3>

Здесь я связываю пример упрощенного использования (2 -й кодовой блок). < /p>

Подробнее здесь: https://stackoverflow.com/questions/604 ... meter-pack
Ответить

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

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

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

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

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