techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
1

Variadic templates

18.11.2015, 13:54. Показов 1150. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
А как бы так исхитриться, чтобы шаблонная функция, использующая Variadic templates узнала размер передаваемых ей параметров с тем, чтобы, допустим, сохранить их в динамическую память для более позднего использования?

Иначе говоря хочется что-то вроде былинного сишного sizeof но для всего набора параметров.

Можно так сделать?

Добавлено через 18 минут
А, всё, спасибо, разобрался .
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2015, 13:54
Ответы с готовыми решениями:

Variadic Templates - как обращаться к аргументам variadic-функции?
Всем привет! Наверное, рано мне ещё с моими скудными знаниями в это лезть, но, изучив шаблоны и...

Variadic templates
как можно сделать чтобы функция принимала бесконечное количество объектов std::string? (только их)...

Variadic templates
1. как можно сделать чтобы передавались ссылки на переменные? (с variadic templates) 2. как вообще...

Variadic Templates
проблема только в переводе на русский, обычно это "Шаблоны с переменным числом аргументов" но...

11
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 14:04 2
sizeof ... ( Args )
1
Неэпический
18112 / 10699 / 2062
Регистрация: 27.09.2012
Сообщений: 26,945
Записей в блоге: 1
18.11.2015, 14:20 3
Лучший ответ Сообщение было отмечено Mirmik как решение

Решение

castaway, это кол-во параметров в паке, а не размер в байтах (ТС'у же нужен именно размер в байтах?)

Добавлено через 3 минуты
т.е. что-то вроде
C++
1
2
3
4
5
6
7
8
9
10
11
constexpr size_t get_sizeof_pack ()
{
    return 0 ;
}
 
 
template < typename T, typename ... Args>
constexpr size_t get_sizeof_pack (T&&, Args &&... args)
{
    return sizeof(T) + get_sizeof_pack(args...) ;
}
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 14:35 4
Croessmah, про байты ТС ничего не говорил.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
18.11.2015, 14:49  [ТС] 5
Подразумевал :-).

Croessmah
Ваш вариант гораздо лучше того, который я сам сочинил.
Небольшой вопрос вдогонку.

Не могли бы вы пояснить мне такое поведение (Не то чтобы это важно, просто меня сие удивило):

C++
1
2
int task(int i, int g){};
get_sizeof_pack(task);
функция возвращает... 1.

С чего бы? Я, как бы, ожидал или ошибку или размер указателя.

Добавлено через 8 минут
sizeof(void())
Тоже самое даёт... Неожиданно .
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 14:50 6
get_sizeof_pack( &task ); - так будет размер указателя.

Добавлено через 47 секунд
Цитата Сообщение от Mirmik Посмотреть сообщение
С чего бы?
Видимо размер типа функции равен одному байту.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
18.11.2015, 14:53  [ТС] 7
А что это вообще за сущность такая, размер от типа функции?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 14:57 8
Цитата Сообщение от Mirmik Посмотреть сообщение
А что это вообще за сущность такая, размер от типа функции?
У функции есть тип. У типа есть размер.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
18.11.2015, 15:03  [ТС] 9
А почему он не 0, не 2, не 4... Почему 1... Что именно в функции весит 1 байт?
Я бы понял, если бы размер был 0.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 15:13 10
Цитата Сообщение от Mirmik Посмотреть сообщение
Я бы понял, если бы размер был 0.
А я бы не понял. У типа должен быть какой-то размер.

А вообще, у меня компилятор предупреждает об этом:
main.cpp:9:15: warning: invalid application of 'sizeof' to a function type [-Wpointer-arith]
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
18.11.2015, 15:17  [ТС] 11
А вообще, у меня компилятор предупреждает об этом:
Вот собственно этого я и ждал, когда вводил код.
Видимо, просто, какие-то замуты моего компилятора. Ладно... Это совершенно неважно .

Спасибо всем.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
18.11.2015, 15:19 12
В стандарте написано:
5.3.3
...
The sizeof operator shall not be applied to an expression that has function or incomplete type, ...
...
1
18.11.2015, 15:19
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2015, 15:19
Помогаю со студенческими работами здесь

Variadic templates
typedef function&lt;double(double ...)&gt; fun; inline int sum() { return 0; } template...

Variadic templates
Как обращаться напрямую к элементам Args? template&lt;typename... Args&gt;

Result_of + variadic templates
Как здесь можно вывести возвращаемый тип функторов? res_t должен получиться типом которым они ...

Variadic templates fail
Здравствуйте. У меня проблема, нужно реализовать в проекте функционал, который будет использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru