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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2015, 02:55   #1
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию Как узнать тип auto-переменной

Есть шаблонный класс, в котором в качестве шаблона выступает тип Callback.
Код:
template <class Callback>
class MyClass
{
public:
    MyClass(Callback f): f(f) {}
    void run()
    {
        f();
    }
private:
    Callback f;
};
В качестве кэлбека используется лямбда-выражение, которое в коде создаётся в таком формате
Код:
auto f = [](){return 4;};
Потом мне нужно создать объект MyClass, которому я хочу в конструктор передать f. Распознать тип, он как я понимаю, не может, так это класс, а не функция (по крайней мере, у меня не распознаёт, пишет ошибку). А вот как определить шаблон, не прописывая подробно тип, не знаю.
Хотелось бы чего-то в формате
Код:
MyClass<type_of_value(f)>  m(f);
Помогите, пожалуйста.
БалаШагаЛ вне форума Ответить с цитированием
Старый 18.05.2015, 08:36   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Для классов тип шаблона всегда надо указывать явно, а вот для функций - нет.
Попробуйте так (не проверял):

Код:
template <typename callback> MyClass... { };

template <typename callback>
MyClass<callback> Function(callback argument)
{
  return MyClass<callback>(argument);
}

int main()
{
  auto f = ...;
  auto callback = Function(f);
}
waleri вне форума Ответить с цитированием
Старый 18.05.2015, 19:02   #3
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Спасибо! Работает.

Но если кто-то из форумчан знает способ передать тип в описанном мной формате, то, пожалуйста, поделитесь - очень интересно.
БалаШагаЛ вне форума Ответить с цитированием
Старый 18.05.2015, 22:11   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://rextester.com/MCGZ12715


Код:
#include <iostream>


template <class Callback>
class MyClass
{
public:
    MyClass(Callback f): f(f) {}
    void run()
    {
        f();
    }
private:
    Callback f;
};

int main()
{
    std::cout << "Hello, world!\n";
    
    auto f = [](){ std::cout<<"run...\n"; return 4; };
    
    MyClass<decltype(f)> myclass(f);
    
    myclass.run();
}
_Bers вне форума Ответить с цитированием
Старый 19.05.2015, 00:03   #5
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Вот это идеально! Огромное спасибо!
Я счастлив!
БалаШагаЛ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать тип переменной MAcK Паскаль, Turbo Pascal, PascalABC.NET 8 19.12.2012 13:25
как узнать тип шифрования файлов doc и xls? IvanKonst Общие вопросы Delphi 11 18.09.2012 22:18
PHP и как узнать имя переменной CodeNOT PHP 8 30.06.2011 14:12
как узнать тип файла VAsiliyMvv Общие вопросы Delphi 61 07.07.2010 10:27
Как узнать тип (класс) OLE Automation объекта? Stilet Win Api 2 02.07.2010 09:07