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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2020, 03:26   #11
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Нет. В моем примере шаблон инстанцируется вообще без рекурсии.
А мне нужен пример с рекрсией где будет создано 5 объектов, вот вы и не хотите думать а у меня не получается я бы сделал. Можно построить на примере в начале темы. Но как я не знаю не получается.
Loksiin12 вне форума Ответить с цитированием
Старый 27.11.2020, 14:48   #12
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
А мне нужен пример с рекрсией где будет создано 5 объектов
Так напишите, там же простейшая рекурсия:
Код:
#include <iostream>

template <int I>
struct Type {
    struct TypeList {
        int arr[I];
    };
};

template <int I>
void test() {
    if constexpr (I > 0) {
        typename Type<I>::TypeList a;
        std::cout << sizeof(a) << '\n';
    
       test<I-1>();
    }
}

int main([[maybe_unused]] int argc, [[maybe_unused]] char* argv[]) {
    std::ios::sync_with_stdio(false);
    
    test<5>();
}
Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
вот вы и не хотите думать
Может вы начнете думать и четко формулировать, что хотите?.. А то абстрактно и я могу руками помахать.
FrosyaZZ вне форума Ответить с цитированием
Старый 27.11.2020, 22:21   #13
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
constexpr
у меня не поддерживается constexpr, можно без него этот пример. Ну да рекурсия здесь вроде проще но условие меняется и я вот тяжело это инстанцирование понимаю.
Loksiin12 вне форума Ответить с цитированием
Старый 30.11.2020, 12:19   #14
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
у меня не поддерживается constexpr, можно без него этот пример
Тут же простейшая рекурсия. Ну напишите в старом стиле:
Код:
#include <iostream>

template <size_t I>
struct Type {
    struct TypeList {
        int arr[I];
    };
};


template <size_t I>
void test() {
    typename Type<I>::TypeList a;
    std::cout << sizeof(a) << '\n';
    test<I-1>();
}

template <>
void test<0>() {}

int main([[maybe_unused]] int argc, [[maybe_unused]] char* argv[]) {
    std::ios::sync_with_stdio(false);
    
    test<5>();
}
Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
но условие меняется и я вот тяжело это инстанцирование понимаю.
Какое условие меняется? Тут же не ничего сложнее: в a + b подставить a = 5...
FrosyaZZ вне форума Ответить с цитированием
Старый 30.11.2020, 18:13   #15
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
typename Type<I>::TypeList a;
std::cout << sizeof(a) << '\n';
test<I-1>();
В принципе да здесь оно и формирует нужное количество структур. Этот способ было бы классно доработать, т.к. для использования этого кода нужно передавать функцию во внутрь. Чтобы к структуре можно было обращаться как здесь tpl.get<0>() = ...;, это получиться a.arr[1] будет такой, tpl.get<1>() = ...; будет такой a.arr[2] и т.д. пока не будет равно size_t I
Loksiin12 вне форума Ответить с цитированием
Старый 30.11.2020, 18:20   #16
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
т.к. для использования этого кода нужно передавать функцию во внутрь
Чего?

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
Чтобы к структуре можно было обращаться как здесь tpl.get<0>() = ...;, это получиться a.arr[1] будет такой, tpl.get<1>() = ...; будет такой a.arr[2] и т.д.
Код:
Tuple<typename Type<1>::TypeList, typename Type<2>::TypeList, typename Type<3>::TypeList> tpl;
FrosyaZZ вне форума Ответить с цитированием
Старый 30.11.2020, 18:21   #17
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Tuple<typename Type<1>::TypeList, typename Type<2>::TypeList, typename Type<3>::TypeList> tpl;
Я думал может это можно сделать без списка за счёт рекурсии.
Loksiin12 вне форума Ответить с цитированием
Старый 30.11.2020, 18:30   #18
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Можно. С С++14 есть https://en.cppreference.com/w/cpp/ut...teger_sequence и различные доп. функции и шаблоны. В сети полно как это сделать на С++11.
FrosyaZZ вне форума Ответить с цитированием
Старый 01.12.2020, 00:44   #19
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Можно. С С++14
1000 программ не скачаешь я думаю что можно на примере в первом посте построить такой эффект, только списка здесь уже не будет, т.к. здесь один объект, эта структура которая за счёт рекурсии раскрутиться и получиться список, все значения заранее известны да и к тому же ваш прототип как вариант, но я хотел бы иметь как бы список чтобы было обращение как tpl.get<0>(), неужели нельзя так сделать?
Loksiin12 вне форума Ответить с цитированием
Старый 01.12.2020, 12:44   #20
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Как нельзя? Похоже вы сами не понимаете, что хотите. Давайте вы напишите код и как он должен работать. Без всяких левых примеров, пусть не компилится... но точно показывает, что вы хотите.

Код:
template <typename Seq> struct tpl_impl;

template <size_t ... Is>
struct tpl_impl<std::integer_sequence<size_t, Is...>>
{
    using type = Tuple<typename Type<1 + Is>::TypeList...>;
}; 

template <size_t Max>
using Tpl = typename tpl_impl<std::make_integer_sequence<size_t, Max>>::type;

Tpl a;
Вот вам еще вариант.
FrosyaZZ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведите конкретный полезный пример использования собственного написанного класса Александр01 Общие вопросы Delphi 5 03.07.2017 12:50
приведите пример клиент-серверного приложения. ромик0 Общие вопросы C/C++ 8 22.06.2011 00:01
Пример создания класса и объекта в этом классе Valera Помощь студентам 0 19.04.2011 12:50
Пожалуйста, приведите пример использования NetMessageBufferSend. slavka1988 Работа с сетью в Delphi 5 20.03.2009 13:03