• [^] # Re: Les concepts, c'est du sucre

    Posté par . En réponse à la dépêche Retard(s) pour la prochaine version de C++. Évalué à 2.

    Oui m'enfin à ce point là autant dire que le C++ n'est que du sucre syntaxique par rapport au C (ex : GTK+ est codé en C, mais sur paradigme objet)...

    SFINAE + boost::enable_if, c'est un peu la solution de rafistolage pour arriver à ses fins. On arrive pas à une lisibilité de code exemplaire, rien qu'avec les paramètres fantômes :


    //overload for list nodes
    template<class SyntaxNodeT>
    SyntaxNodeT
    convert_node
    (
    const tree_node_t& node,
    typename boost::enable_if<syntax_nodes::utility::is_list_node>::type* = 0
    )
    {
    return convert_list_node(node);
    }

    //overload for optional nodes
    template<class SyntaxNodeT>
    SyntaxNodeT
    convert_node
    (
    const tree_node_t& node,
    typename boost::enable_if<syntax_nodes::utility::is_optional_node>::type* = 0
    )
    {
    return convert_optional_node(node);
    }

    //etc...


    Je préfèrerais écrire ça :

    //overload for list nodes
    template<ListNode SyntaxNodeT>
    SyntaxNodeT
    convert_node(const tree_node_t& node)
    {
    return convert_list_node(node);
    }

    //overload for optional nodes
    template<OptionalNode SyntaxNodeT>
    SyntaxNodeT
    convert_node(const tree_node_t& node)
    {
    return convert_optional_node(node);
    }

    //etc...


    Et encore, je vous montre pas la tronche des type traits qu'on se serait bien épargné de taper.