Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.0.20] |
|
Страницы: (77) « Первая ... 47 48 [49] 50 51 ... 76 77 ( Перейти к последнему сообщению ) |
Сообщ.
#721
,
|
|
|
Подразумевает ли новый стандарт какой-то способ задать функцию с переменным числом аргументов одного типа?
Допустим есть: template<typename T, typename ... Args> void f(const T &a1, const Args& ... args) { // ... } Но требуется, чтобы все аргументы были типа T. Можно бы было обойтись std::initializer_list<T>, но мне нужно знать количество аргументов во время компиляции, т.е. sizeof...(). Хотелось бы что-то в духе: template<typename T> void f(const T &a1, const T& ... args) { // ... } Есть ли какой-то относительно простой способ это сделать? |
Сообщ.
#722
,
|
|
|
D_KEY, а static_assert с проверкой всех Args на идентичность T не подойдёт?
|
Сообщ.
#723
,
|
|
|
Цитата MyNameIsIgor @ D_KEY, а static_assert с проверкой всех Args на идентичность T не подойдёт? Можно, конечно, только не красиво... Вроде как есть механизм, но не доделанный(ИМХО). |
Сообщ.
#724
,
|
|
|
Цитата D_KEY @ Вроде как есть механизм, но не доделанный(ИМХО). В чём недоделанный? Ты хочешь перегрузку по указанному типу? |
Сообщ.
#725
,
|
|
|
Цитата MyNameIsIgor @ В чём недоделанный? Ты хочешь перегрузку по указанному типу? Допустим. Впрочем ладно, это уже холивар Нет, так нет. |
Сообщ.
#726
,
|
|
|
D_KEY, ты можешь проверять тип каждого параметра на соответствие T. Как-то так, например:
template <typename T, typename F, typename ...Args> struct AllSame; template <typename T, typename ...Args> struct AllSame<T, T, Args...> : AllSame <T, Args...> {}; template <typename T> struct AllSame<T, T> {}; template<typename T, typename ... Args> void f(const T &a1, const Args& ... args) { AllSame<T, Args...> dummy; // ... } |
Сообщ.
#727
,
|
|
|
Хм... Я что-то не так написал или в натуре просто "ещё не реализовано"? Кто уже вариадики пользовал серьёзно, что тут может быть не по Стандарту?
|
Сообщ.
#728
,
|
|
|
Цитата sorry, unimplemented: cannot expand 'Args ...' into a fixed-length argument list да, это недореализованно. |
Сообщ.
#729
,
|
|
|
Цитата niXman @ Цитата sorry, unimplemented: cannot expand 'Args ...' into a fixed-length argument list да, это недореализованно. а можно по подробнее, что конкретно не реализовано, а то я что-то никак не пойму, откуда тут fixed-length argument list? и в чем его принципиально отличие от следующего кода (который кстати компилируется) template<class T, class ... Args> struct all_same; template<class T, class ... Args> struct all_same<T, T, Args ...> : all_same<T, Args...> {}; template<class T> struct all_same<T, T> {}; template<class T, class ...Args> void f(const T& t, const Args& ... args) { all_same<T, Args...> dummy; } |
Сообщ.
#730
,
|
|
|
Цитата D_KEY @ Писать лень, могу на пальцах прикинуть: аргументы в список типов.Есть ли какой-то относительно простой способ это сделать? далее, по enable_if в возвращаемый результат либо вручную пишешь функтор, проверяющий все ли одинаковы, либо количество повторений должно быть равно длинне списка. Вроде для второго в Loki всё есть. |
Сообщ.
#731
,
|
|
|
Цитата niXman @ Ну это радует. В смысле, радует, что я это правильно себе представляю, мне-то пока негде разгуляться с вариадиками. XandoX, я вот тоже не пойму, чем мешает ещё один шаблонный параметр в первичном шаблоне. Впрочем, для указанного случая это не принципиально. Я сначала предполагал заюзать F, но оказалось, что для нужных частичных специализаций он не требуется, Args и сам справляется.да, это недореализованно. D_KEY, я так полагаю, подобные вещи предполагалось возложить на концепты. Вариадики не виноваты, что с концептами такая неприятность случилась. Добавлено Да, clang съел и не подавился. |
Сообщ.
#732
,
|
|
|
Жаль, что в новый стандарт так и не ввели синтаксический сахар для реализации свойств объекта. Печаль...
|
Сообщ.
#733
,
|
|
|
Меня глючит, или в C++11 грозились добавить rope? Сейчас полистал Стандарт - нету
|
Сообщ.
#734
,
|
|
|
Цитата MyNameIsIgor @ Меня глючит, или в C++11 грозились добавить rope? Сейчас полистал Стандарт - нету Погуглил. Ты про класс для манипулирования очень длинной строкой? Наверное решили, что оно слишком специфично, чтобы запиливать в STL. |
Сообщ.
#735
,
|
|
|
Цитата MyNameIsIgor @ Меня глючит, или в C++11 грозились добавить rope? Сейчас полистал Стандарт - нету Эммм... Может быть для этих целей deque подойдёт? |