Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 04.11.2020, 18:46   #71
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Код:
template <typename T, unsigned int I>
class TupleElement
{
public:
    T & get() 
    {
        return m_value;
    }
private:
    T m_value;
};
Почему эта функция должна быть ссылочной, можно ли дописать обычную для использования например в decltype?
Loksiin12 вне форума Ответить с цитированием
Старый 05.11.2020, 13:56   #72
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 356
По умолчанию

функция возвращает ссылку для возможности менять переменную по этой ссылке.

decltype пользовать при этом никто не запрещает
Алексей1153 вне форума Ответить с цитированием
Старый 05.11.2020, 21:38   #73
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
для возможности менять переменную по этой ссылке
Своего рода указание компилятору о том что параметр находится на одном и том же месте но может изменяться. В decltype(tpl.get<0>()) тут что привести засунуть элемент кортежа не получиться, проверьте и пока 98ом стандарте решения кроме как засунуть такую запись в функцию и вернуть простое число от туда нет decltype(Funkz(tpl.get<0>()))тут что привести, но бывают ситуации когда элементами кортежа могут быть сложные элементы например классы или структуры и тут уже такое не прокатит, потому что каждая функция в отличает от обычной переменной заточена на свой такой объект (структуру или класс).

Последний раз редактировалось Loksiin12; 05.11.2020 в 21:41.
Loksiin12 вне форума Ответить с цитированием
Старый 15.11.2020, 01:49   #74
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Алексей1153, Объясните этот модуль
Код:
template <
    typename T1 = NullType, typename T2 = NullType, typename T3 = NullType,
    typename T4 = NullType, typename T5 = NullType    
>
class Tuple : public TupleImpl<typename MakeList<T1, T2, T3, T4, T5>::Result>
{
    typedef typename MakeList<T1, T2, T3, T4, T5>::Result ElementsList;
        
public:
    template <unsigned int Index>
    typename TypeAt<ElementsList, Index>::Result & get() 
    {
        TupleElement<typename TypeAt<ElementsList, Index>::Result, Index> & el = *this;
        return el.get();
    }
    enum 
    {
        Size = Length<ElementsList>::value
    };
    
};
Loksiin12 вне форума Ответить с цитированием
Старый 15.11.2020, 10:43   #75
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 356
По умолчанию

если честно, лень всё вспоминать и вникать.
Навскидку как-то так:

MakeList<T1, T2, T3, T4, T5>::Result (для него есть алиас ElementsList) - это тип, представляющий собой цепь из перечисленных типов

TupleImpl - из этой цепи типов создаёт экземпляр структуры, в которой есть все экземпляры перечисленных типов. Сама структура Tuple - потомок данного TupleImpl

Size - константа, равная количеству типов в ElementsList

get() - метод, возвращающий ссылку на экземпляр по нужному индексу из цепи TupleImpl
Алексей1153 вне форума Ответить с цитированием
Старый 15.11.2020, 22:31   #76
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
и вникать
мне интересно для чего здесь так
Код:
TupleElement<typename TypeAt<ElementsList, Index>::Result, Index> & el = *this;
, какую роль здесь выполняет *this
Loksiin12 вне форума Ответить с цитированием
Старый 16.11.2020, 07:18   #77
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 356
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
акую роль здесь выполняет *this
я сейчас с ходу тоже не понял, а разбираться некогда
Алексей1153 вне форума Ответить с цитированием
Старый 21.11.2020, 03:49   #78
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
std::cout<< tpl.get<0>();
std::cout<< tpl.get<1>();
std::cout<< tpl.get<2>();
Если посмотреть на это дело оно работает как массив или 0 одна сущность 1 другая. Если это разные сущности а не один единый массив то это походит как на параллельные миры. Какая разница между массивом и списком?
Loksiin12 вне форума Ответить с цитированием
Старый 21.11.2020, 16:19   #79
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 356
По умолчанию

Loksiin12, массив - это цепь из элементов одного типа. Кортеж - цепь из элементов разного типа (хотя, могут быть и одинаковые в качестве частного случая)
Алексей1153 вне форума Ответить с цитированием
Старый 21.11.2020, 19:36   #80
Loksiin12
Пользователь
 
Регистрация: 04.10.2020
Сообщений: 72
По умолчанию

Алексей1153, Я провёл такой эксперимент
Код:
template <typename F>
static void run(Tuple & tpl, F f)
{char dd[I]={12};cout<<sizeof(dd)<<" "<<*dd<<en;
TupleForEach_<Tuple, (I - 1)>::run(tpl, f);
f(tpl.template get<(I - 1)>());
}
На каждой итерации и в правду объявляется массив который занимает разное количество байт с разницей в единицу. Минимальный размер 1 максимальный равен сумме всех рекурсий + 1ца. По сути чтобы объявить массив таким образом должна быть константа с периодом времени компиляции и I - 1 как раз и выполняет такую роль.
Возникает воопрос а можно ли инстанцировать один объект несколько раз. Пример нужно сделать несколько разных структур.
Код:
template <unsigned const int T>
struct Typelist{
typedef struct Typelist1{
char ii[T];
};};
Чтобы массив ii имел размер от 1го до 4ёх байт. Возможно ли написать такую рекурсию?
Loksiin12 вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разобраться с кодом Boris2 Помощь студентам 1 15.07.2013 14:58
С++ разобраться с кодом marina12 Помощь студентам 2 21.05.2013 22:22
разобраться с кодом iris_ka Помощь студентам 0 16.05.2012 16:19
Разобраться с кодом. Vlero PHP 2 20.01.2011 12:46
проблемка с кодом, результат получается немного не такой как надо hen Помощь студентам 3 24.04.2009 14:11


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS