IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Pointeur de fonction vers une méthode template d'une classe template


Sujet :

Langage C++

  1. #1
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut Pointeur de fonction vers une méthode template d'une classe template
    Bonjour tout le monde

    J'essaye de faire quelquechose comme cela,

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <boost/asio.hpp>
    #include <boost/tuple/tuple.hpp>
     
    template <typename AuthorizedMessages>
    struct serializated_socket
    {
            template <typename T, typename Handler>
            void handle_read_data(const boost::system::error_code& e, T& t, boost::tuple<Handler> handler)
            {}
    };
     
    template <typename AuthorizedMessages, typename T, typename Handler>
    struct select_read_data
    {
            typedef serializated_socket<AuthorizedMessages> socket_type;
     
            select_read_data(socket_type * socket) :
                    socket_(socket) {};
     
            void operator() (Handler handler)
            {
                    void (socket_type::*f)(
                                    const boost::system::error_code&,
                                    T&,
                                    boost::tuple<Handler>);
                    /*
                     * Leads to
                     * test1.cc: In member function ‘void select_read_data<AuthorizedMessages, T, Handler>::operator()(Handler)’:
                    * test1.cc:33: error: expected primary-expression before ‘,’ token
                * test1.cc:33: error: expected primary-expression before ‘>’ token
                    *test1.cc:33: error: expected primary-expression before ‘)’ token
                    */
                    f = & (socket_type::handle_read_data<T, Handler>);
            }
     
            socket_type* socket_;
    };
     
    struct A {};
    struct B {};
    struct C {};
     
    int main()
    {
            serializated_socket<A> sock;
            select_read_data<A, B, C> select(&sock);
    }
    Mais manifestement il y'a quelquechose que je ne saisis pas sur comment déclarer proprement un pointeur vers cette méthode (le code réel c'est dans des appels asynchrone de boost::asio). Est-ce que c'est possible de déclarer quelquechose dans le genre ? Comment peut-on faire pour faire plaisir au compilateur dans ce cas ?

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    J'ai fini par trouver, grâce à faq cormeau.
    La syntaxe valide est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f = & (socket_type::template handle_read_data<T, Handler>);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/12/2012, 09h46
  2. Réponses: 3
    Dernier message: 29/11/2011, 20h25
  3. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  4. Réponses: 6
    Dernier message: 15/09/2008, 17h48
  5. Réponses: 4
    Dernier message: 28/03/2008, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo