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

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

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

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

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2022, 04:15   #1
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 115
По умолчанию Функция возвращающая тип в качестве аргумента шаблона/Передать функцию в шаблон

Есть такой код.
Код:
template <int a>
struct __char{char arr_[a];};
template <int Z =0,template <int> class K=__char >
class pass{
 
public: typedef typename std::conditional<(Z==1),decltype(tpl.set<Z>()),K<Z+1>>::type alt;
typename alt Det(){alt el=this;
ret el;
 
}};
 
template<int C,int Z,/*функция*/>
class lass{
 
typedef typename lass<C-1,Z + 1,/*вызов функции*/>::Result Tail;
 
public:
    typedef Typelist</*вызов функции*/,Tail> Result;
};
 
template <int Z,/*функция*/>
class lass<0,Z,/*вызов функции*/>
{
public:
    typedef NullType Result;
};
Объект tpl построен на коде https://programmersforum.ru/showthread.php?t=337101 .Идея состоит в том чтобы запустить схему в рекурсию, и в момент сборки метофункции, функция будет возвращать нужный тип, возможно ли такое?
Loksiin12 вне форума Ответить с цитированием
Старый 24.11.2022, 08:38   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,434
По умолчанию

Функция не может возвращать тип - она должна вернуть значение этого типа, а из этого можно вычислить сам тип с помощью decltype.
Код:
decltype(GetSomeIntegerValue()) int_variable = 123;
Функция при этом НЕ вызывается.
waleri вне форума Ответить с цитированием
Старый 24.11.2022, 21:07   #3
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 115
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Функция не может возвращать тип
this возвращает тип(не совсем чистый правда), если его поместить в typeid то можно получить тип. Можно взять к примеру вот этот код.
Код:
    template <unsigned int Index>
    typename TypeAt<ElementsList, Index>::Result & get() 
    {
        TupleElement<typename TypeAt<ElementsList, Index>::Result, Index>  el = this;
        return el;
    }
Но честно говоря такое себе. Это действительно сложная задача раз никто не знает.
Loksiin12 вне форума Ответить с цитированием
Старый 24.11.2022, 22:13   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 262
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
Это действительно сложная задача раз никто не знает.
Вы слышали душетрепещущую историю про Неуловимого Джо?
Valick вне форума Ответить с цитированием
Старый 24.11.2022, 23:34   #5
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
Вы слышали душетрепещущую историю про Неуловимого Джо?
Тут не до историй хочеться реализовать задумку, но видимо всему своё место.
Loksiin12 вне форума Ответить с цитированием
Старый 26.11.2022, 23:09   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,434
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
this возвращает тип
this != тип.
У вас в голове каша.
waleri вне форума Ответить с цитированием
Старый 26.11.2022, 23:18   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,217
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
Можно взять к примеру вот этот код.
Берем:
Код:
TupleElement<typename TypeAt<ElementsList, Index>::Result, Index>  el = this;
Где здесь this вернул тип? el что такое? С таким подходом и 2+2 возвращает тип.
p51x вне форума Ответить с цитированием
Старый 27.11.2022, 00:15   #8
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 115
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
У вас в голове каша
Да каша много захотел.
Loksiin12 вне форума Ответить с цитированием