Salut, je voudrais passer des références à un tuple, faire un genre à ceci :

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
odfaeg::FastDelegate<void> freeFunction(&bar, std::ref("5"));

Pour la passer ici :

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 template <typename ...A> FastDelegate(void(*f)(A...), A... args) {
        delegate = new FastDelegate0<A...>(f, args...);
    }

Et puis là :

Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
FastDelegate0 (void(*f)(A...), A... args) {
      typedef void(*CB)(Function<void(A...)>, A... args);
      CB cb = &callback;
      funct = new Functor<void(Function<void(A...)>, A...)> (cb, Function<void(A...)>(f));
      params = std::make_tuple(args...);
}

Mais le compilateur me sors une erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
||=== Build: Debug in ODFAEG-DEMO (compiler: GNU GCC Compiler) ===|
/usr/include/c++/4.8/tuple||In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base() [with long unsigned int _Idx = 0ul; _Head = std::reference_wrapper<const char [2]>]’:|
/usr/include/c++/4.8/tuple|251|required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl() [with long unsigned int _Idx = 0ul; _Head = std::reference_wrapper<const char [2]>; _Tail = {}]’|
/usr/include/c++/4.8/tuple|394|required from ‘constexpr std::tuple< <template-parameter-1-1> >::tuple() [with _Elements = {std::reference_wrapper<const char [2]>}]’|
/usr/local/include/odfaeg/Core/fastDelegate.h|69|required from ‘odfaeg::FastDelegate6<F, A>::FastDelegate6(F, A ...) [with F = void (*)(const std::basic_string<char>&); A = {std::reference_wrapper<const char [2]>}]’|
/usr/local/include/odfaeg/Core/fastDelegate.h|435|required from ‘odfaeg::FastDelegate<void>::FastDelegate(F, A ...) [with F = void (*)(const std::basic_string<char>&); A = {std::reference_wrapper<const char [2]>}]’|
/home/laurent/Développement/Projets-c++/ODFAEG-DEMO/main.cpp|67|required from here|
/usr/include/c++/4.8/tuple|131|error: no matching function for call to ‘std::reference_wrapper<const char [2]>::reference_wrapper()’|
/usr/include/c++/4.8/tuple|131|note: candidates are:|
/usr/include/c++/4.8/functional|445|note: std::reference_wrapper<_Tp>::reference_wrapper(const std::reference_wrapper<_Tp>&) [with _Tp = const char [2]]|
/usr/include/c++/4.8/functional|445|note:   candidate expects 1 argument, 0 provided|
/usr/include/c++/4.8/functional|439|note: std::reference_wrapper<_Tp>::reference_wrapper(_Tp&) [with _Tp = const char [2]]|
/usr/include/c++/4.8/functional|439|note:   candidate expects 1 argument, 0 provided|
/usr/include/c++/4.8/tuple||In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base() [with long unsigned int _Idx = 1ul; _Head = std::reference_wrapper<std::basic_string<char> >]’:|
/usr/include/c++/4.8/tuple|251|  recursively required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl() [with long unsigned int _Idx = 1ul; _Head = std::reference_wrapper<std::basic_string<char> >; _Tail = {}]’|
/usr/include/c++/4.8/tuple|251|required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl() [with long unsigned int _Idx = 0ul; _Head = Bar*; _Tail = {std::reference_wrapper<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >}]’|
/usr/include/c++/4.8/tuple|527|required from ‘constexpr std::tuple<_T1, _T2>::tuple() [with _T1 = Bar*; _T2 = std::reference_wrapper<std::basic_string<char> >]’|
/usr/local/include/odfaeg/Core/fastDelegate.h|69|required from ‘odfaeg::FastDelegate6<F, A>::FastDelegate6(F, A ...) [with F = void (Bar::*)(const std::basic_string<char>&); A = {Bar*, std::reference_wrapper<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >}]’|
/usr/local/include/odfaeg/Core/fastDelegate.h|435|required from ‘odfaeg::FastDelegate<void>::FastDelegate(F, A ...) [with F = void (Bar::*)(const std::basic_string<char>&); A = {Bar*, std::reference_wrapper<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >}]’|
/home/laurent/Développement/Projets-c++/ODFAEG-DEMO/main.cpp|73|required from here|
/usr/include/c++/4.8/tuple|131|error: no matching function for call to ‘std::reference_wrapper<std::basic_string<char> >::reference_wrapper()’|
/usr/include/c++/4.8/tuple|131|note: candidates are:|
/usr/include/c++/4.8/functional|445|note: std::reference_wrapper<_Tp>::reference_wrapper(const std::reference_wrapper<_Tp>&) [with _Tp = std::basic_string<char>]|
/usr/include/c++/4.8/functional|445|note:   candidate expects 1 argument, 0 provided|
/usr/include/c++/4.8/functional|439|note: std::reference_wrapper<_Tp>::reference_wrapper(_Tp&) [with _Tp = std::basic_string<char>]|
/usr/include/c++/4.8/functional|439|note:   candidate expects 1 argument, 0 provided|
||=== Build failed: 3 error(s), 12 warning(s) (0 minute(s), 3 second(s)) ===|
Donc voila je ne vois pas comment je pourrais passer des références à un tuple.

Merci d'avance pour votre aide.