Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2012, 22:08   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию Variadic Templates и их применение в качестве списка полей

В общем стало интересно можно ли совершить нечто подобное(со старой реализацией переменной длины шаблонов более менее ясно) на новом стандарте.
хочу обьявить шаблонный класс и в итоге(при раскрытии) получить нечто подобное в итоге:
Код:
MyClass<int,int,double> cl;
/*
члены будут 
Wrapper<int> f1
Wrapper<int> f2
Wrapper<double> f3
*/
то есть каждый член должен быть обернут.

хотя наверно придеться на препроцессор смотреть, там более универсально даст применение(с указанием имен членов)
но как то не вариант
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2012, 12:51   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Если нужно в зависимости от аргументов переменное число полей, то без препроцессора никак. Посмотрите в сторону boost preprocessor.

UPD
Конечно, можно и на шаблонах, но красиво это не будет.

UPD 2
А может и будет. Есть же наследование!
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.08.2012, 12:58   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Непонятно, что можно сделать с именами. Использование крайне неприятное)

Код:
template <typename ... Args>
class MyClass;

template <>
class MyClass<> { };

template <typename T, typename ... Args>
class MyClass<T, Args...> : public MyClass<Args...> {
public:
    T data;
};

int main ( ) {
    MyClass<int, char, double> x;
    x.data = 15;
    x.MyClass<char, double>::data = '0';
    x.MyClass<double>::data = 15.289;
}
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.08.2012, 13:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вернусь значит к препроцессору, может даже к собственному синтаксису оного, если стандартный будет плох.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2012, 13:19   #5
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Можно поиграться дальше и сделать доступ к нужному члену через номер в шаблоне, но красивее это не станет. Препроцессор тут - самое то. Удачи!)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.08.2012, 13:29   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

самое хучшее что каждый такой член надо еще и инициализировать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2012, 14:06   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну, в моей реализации это не такая уж и проблема. Variadic templates дают разгуляться, плюс инициализацию второго и далее членов можно скинуть на надкласс.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.08.2012, 14:30   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там типы могут повторяться..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2012, 17:20   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Это тоже ничего не испортит.
Но, опять же, препроцессором будет в разы красивее.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.08.2012, 17:24   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я тоже так думаю, в общем новая фича идет мимо))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
variadic templates и компиляторы _Bers Общие вопросы C/C++ 4 18.01.2013 09:55
Выбор значения из списка с автозаполнением остальных полей. NHVStudio Microsoft Office Access 4 13.02.2012 09:25
Создание пакетного файла с использованием списка значений в качестве параметров. chaosfall Операционные системы общие вопросы 1 05.12.2010 21:01
MSVS templates coinkrsk Общие вопросы C/C++ 2 30.09.2010 09:51
Вывод списка выбранных полей, относящихся к элементу DBCheckListBox Cvetok Помощь студентам 0 07.06.2008 16:20