web-dev-qa-db-fra.com

fonctions de modèle statiques dans une classe

Comment puis-je créer la fonction suivante dans une classe, puis accéder à cette fonction à partir de main? Ma classe est juste une collection d'un tas de fonctions statiques.

template<typename T> double foo(vector<T> arr);
23
CodeKingPlusPlus

Définissez la fonction dans le fichier .h.

Fonctionne bien pour moi

a.h

#include <vector>
#include <iostream>

using namespace std;
class A {
public:
template< typename T>
    static double foo( vector<T> arr );

};

template< typename T>
double A::foo( vector<T> arr ){ cout << arr[0]; }

main.cpp

#include "a.h"
int main(int argc, char *argv[])
{
    A a;
    vector<int> arr;
    arr.Push_back(1);
    A::foo<int> ( arr );
}

32
Tim Kachko

Vous créez une classe modèle:

template<typename T>
class First
{
public:
    static  double foo(vector<T> arr) {};
};

Notez également que vous devez passer vector par référence, ou dans votre cas, également const référence ferait de même.

template<typename T>
class First
{
public:
    static  double foo(const vector<T>& arr) {};
};

Vous pouvez ensuite appeler la fonction comme:

First<MyClass>::foo(vect);
3
Luchian Grigore