2012-02-19 26 views
17

Làm cách nào để thực hiện chức năng sau trong một lớp và sau đó truy cập chức năng này từ chính? Lớp học của tôi chỉ là một tập hợp các hàm tĩnh.các chức năng mẫu tĩnh trong một lớp

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

Hiện những gì bạn đã cố gắng. –

+0

Đây là những gì tôi đã thử ... Ngoại trừ nó được đặt trong một lớp bình thường – CodeKingPlusPlus

+1

Vì lớp của bạn chỉ là một tập hợp các hàm tĩnh, có lẽ một 'không gian tên' sẽ tốt hơn? – Yay295

Trả lời

23

Xác định các chức năng trong file .h.

trình tốt cho tôi

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

Nó hoạt động ngay bây giờ cho tôi .. thú vị và kỳ lạ ... Tôi nghĩ studio trực quan là whack !! hahaha – CodeKingPlusPlus

+2

mỗi khi bạn khai báo mẫu, xác định chúng trong một tệp tiêu đề và nó sẽ là OK sau đó)) –

+16

Bạn không muốn sử dụng câu lệnh trong tệp tiêu đề: "using namespace std;" Sử dụng "std :: vector " để thay thế. – Nick

3

Bạn làm cho một lớp mẫu:

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

Cũng lưu ý rằng bạn phải vượt qua vector bằng cách tham khảo, hoặc trong trường hợp của bạn, cũng const tham khảo sẽ làm như vậy.

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

Sau đó bạn có thể gọi hàm như:

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

Làm cách nào để gọi chức năng đó từ chính? Tôi nhận được một lỗi lạ sau khi tôi gọi chức năng của tôi như thế này: ClassName :: foo (arr) – CodeKingPlusPlus

+0

Có một số dấu chấm phẩy không cần thiết ở đó. –

Các vấn đề liên quan