2012-02-19 12 views
17

¿Cómo hago la siguiente función dentro de una clase y luego accedo a esta función desde main? Mi clase es solo una colección de muchas funciones estáticas.funciones de plantilla estáticas en una clase

template<typename T> double foo(vector<T> arr); 
+1

Mostrar lo que intentaste. –

+0

Esto es lo que probé ... Excepto que se coloca en una clase ordinaria – CodeKingPlusPlus

+1

Dado que su clase es solo una colección de funciones estáticas, ¿quizás un 'namespace' sería mejor? – Yay295

Respuesta

23

Definir la función en el archivo .h.

funciona bien para mí

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); 
} 

 

+1

Ahora funciona para mí ... interesante y extraño ... ¡Creo que el estudio visual es genial! jajaja – CodeKingPlusPlus

+2

cada vez que declaras plantillas, defínalas en un archivo de cabecera y estará bien entonces)) –

+16

No quieres tener que usar instrucciones en los archivos de encabezado: "using namespace std;" Utilice "std :: vector " en su lugar. – Nick

3

Se crea una clase de plantilla:

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

También tenga en cuenta que debe pasar vector por referencia, o en su caso, también const referencia haría lo mismo.

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

A continuación, puede llamar a la función como:

First<MyClass>::foo(vect); 
+0

¿Cómo llamo a esa función desde main? Recibo un error extraño después de llamar a mi función de esta manera: ClassName :: foo (arr) – CodeKingPlusPlus

+0

Aquí tengo algunos puntos y comas innecesarios. –

Cuestiones relacionadas