Вариадики
От: saf_e  
Дата: 10.11.15 09:57
Оценка:
Че-т так и не смог победить, мож кто подскажет.

template<typename _R, template ... _args>
void make_visitor(std::function<_R (_args)> f) // где-то здесь должно быть многоточие
{
    
}

int main()
{
    make_visitor<void, int, double>([](int){}, [](double){});
}


Идея, ф-ция принимает набор std::function с сигнатурами из вариадиков (фнкций столько же сколько типов в вариадике)
Re: Вариадики
От: uzhas Ниоткуда  
Дата: 10.11.15 10:01
Оценка:
Здравствуйте, saf_e, Вы писали:

_>Че-т так и не смог победить, мож кто подскажет.


http://ideone.com/uRpgSR
Re[2]: Вариадики
От: saf_e  
Дата: 10.11.15 10:05
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, saf_e, Вы писали:


_>>Че-т так и не смог победить, мож кто подскажет.


U>http://ideone.com/uRpgSR


хм, этот вариант я пробовал, ни тут http://cpp.sh/, ни в VS2013 не завелось
Re[3]: Вариадики
От: Igore Россия  
Дата: 10.11.15 10:52
Оценка:
Здравствуйте, saf_e, Вы писали:

_>>>Че-т так и не смог победить, мож кто подскажет.

U>>http://ideone.com/uRpgSR
_>хм, этот вариант я пробовал, ни тут http://cpp.sh/, ни в VS2013 не завелось
Compilation successful.
В студии тоже скомпилировалось http://webcompiler.cloudapp.net/ но там 2015 Update 1 RC
Re[3]: Вариадики
От: Constructor  
Дата: 10.11.15 10:53
Оценка:
Здравствуйте, saf_e, Вы писали:

_>Здравствуйте, uzhas, Вы писали:


U>>Здравствуйте, saf_e, Вы писали:


_>>>Че-т так и не смог победить, мож кто подскажет.


U>>http://ideone.com/uRpgSR


_>хм, этот вариант я пробовал, ни тут http://cpp.sh/, ни в VS2013 не завелось


Даже в VS 2013 все прекрасно работает, только template на typename не забудьте заменить в описании параметров шаблона и не используйте лидирующие подчеркивания в идентификаторах, начинающихся с большой буквы.
Re[4]: Вариадики
От: uzhas Ниоткуда  
Дата: 10.11.15 10:56
Оценка:
Здравствуйте, Constructor, Вы писали:

C>Даже в VS 2013 все прекрасно работает,

Compiler version:
C++ (vc++) and C — Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86


думаю, что это VS2015
на 2013 не работает, подтверждаю
Re[4]: Вариадики
От: saf_e  
Дата: 10.11.15 11:06
Оценка:
Здравствуйте, Constructor, Вы писали:

C>Даже в VS 2013 все прекрасно работает, только template на typename не забудьте заменить в описании параметров шаблона и не используйте лидирующие подчеркивания в идентификаторах, начинающихся с большой буквы.


блин, опечатался

> на 2013 не работает, подтверждаю


ок, спс
Re[5]: Вариадики
От: Constructor  
Дата: 11.11.15 10:46
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, Constructor, Вы писали:


C>>Даже в VS 2013 все прекрасно работает,

U>

U>Compiler version:
U>C++ (vc++) and C — Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86


U>думаю, что это VS2015

U>на 2013 не работает, подтверждаю

Да, прошу прощения, не заметил, что они обновили компилятор.
Re[5]: Вариадики
От: Constructor  
Дата: 11.11.15 10:48
Оценка: 2 (1)
Здравствуйте, saf_e, Вы писали:

>> на 2013 не работает, подтверждаю


_>ок, спс


В данном случае можно использовать такой обходной маневр:

#include <functional>

template <typename ReturnType, typename Argument>
using Function = std::function<ReturnType(Argument)>;

template <typename ReturnType, typename... Arguments>
void make_visitor(Function<ReturnType, Arguments>... f)
{
}

int main()
{
    make_visitor<void, int, double>([](int){}, [](double){});
}


Этот код компилируется в Visual Studio 2013.
Re[6]: Вариадики
От: saf_e  
Дата: 11.11.15 11:24
Оценка:
Здравствуйте, Constructor, Вы писали:

C>Здравствуйте, saf_e, Вы писали:


>>> на 2013 не работает, подтверждаю


_>>ок, спс


C>В данном случае можно использовать такой обходной маневр:


C>Этот код компилируется в Visual Studio 2013.


спасибо, помогло
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.