Foncteur c ++ et modèles de fonctions

considérer cette simple et inutile de code.

#include <iostream>

struct A {
    template<int N>
    void test() {
        std::cout << N << std::endl;
    }
};

int main() {
    A a;
    a.test<1>();
}

C'est un exemple très simple d'un modèle de fonction. Si toutefois, j'ai voulu remplacer A::test avec une surcharge operator() pour en faire un foncteur?

#include <iostream>

struct A {
    template<int N>
    void operator()() {
        std::cout << N << std::endl;
    }
};

int main() {
    A a;
    a<1>(); //<-- error, how do I do this?
}

Certainement si le operator() a pris des paramètres qui étaient à la charge sur le modèle, le compilateur pourrait éventuellement en déduire le modèle. Mais je ne peux pas trouver la bonne syntaxe pour spécifier les paramètres de modèle avec un sans paramètre foncteur.

Est-il une bonne façon de le faire?

Évidemment, ce code devrait marcher, car il contourne le foncteur syntaxe:

a.operator()<1>();

mais qui a plutôt l'emporte sur l'objectif d'être un foncteur :-P.

source d'informationauteur Evan Teran