2012-02-19 114 views
17

如何在類中創建以下函數,然後從main訪問此函數? 我的課只是一堆靜態函數的集合。類中的靜態模板函數

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

顯示你嘗試過什麼。 – 2012-02-19 02:27:13

+0

這是我試過的......除了放在普通的類中 – CodeKingPlusPlus 2012-02-19 02:29:19

+1

因爲你的類只是一個靜態函數的集合,所以'namespace'可能會更好? – Yay295 2016-11-18 18:18:25

回答

23

定義功能在.h文件。

工作正常,我

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

它現在適用於我..有趣和奇怪的...我認爲視覺工作室是重擊! hahaha – CodeKingPlusPlus 2012-02-19 02:54:16

+2

每當你聲明模板時,在頭文件中定義它們,那麼它就會OK)) – 2012-02-19 03:06:04

+16

你不想在頭文件中使用語句:「using namespace std;」改爲使用「std :: vector 」。 – Nick 2013-06-27 17:32:39

3

你做一個模板類:

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

還要注意的是,你應該通過引用傳遞vector,或者在你的情況下,也const參考會做同樣的。

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

然後,您可以調用的功能等:

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

如何從main調用該函數?我在調用像這樣的函數後遇到了一個奇怪的錯誤:ClassName :: foo(arr) – CodeKingPlusPlus 2012-02-19 02:36:14

+0

在那裏得到了一些不必要的分號。 – 2012-02-19 02:36:30