2016-05-07 65 views
2

我正在努力使用模板。對我來說,以下編譯就好:功能模板部分專業化'swap <T>'不允許

//foo.h 
class foo { 
public: 
    template <typename T> 
    void swap(T* values, uint8_t offset) 
    { 
     T swp = values[offset]; 
     values[offset] = values[offset + 1]; 
     values[offset + 1] = swp; 
    } 
}; 

這不:

//foo.h 
class foo { 
public: 
    template <typename T> 
    void swap(T* values, uint8_t offset); 
}; 

//foo.cpp 
template <typename T> 
void foo::swap<T>(T* values, uint8_t offset) 
{ 
    T swp = values[offset]; 
    values[offset] = values[offset + 1]; 
    values[offset + 1] = swp; 
} 

我得到錯誤信息

error: function template partial specialization 'swap<T>' is not allowed 

我不知道這意味着什麼,所以我不清楚如何進行。提前Thanx。

+1

有關.cpp文件中模板定義的更多信息,請參閱http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file?rq=1。 –

+0

@rwols當然可以,請參閱上述評論中的鏈接。 – emlai

回答

1

刪除<T>

template <typename T> 
void foo::swap(T* values, uint8_t offset) 
{ 
    // … 
} 

這句法是模板專業化。

此外,您很可能希望在頭文件中使用您的模板定義,請參閱Why can templates only be implemented in the header file?

+0

也許值得一提的是,模板應該在頭文件中定義http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file?rq=1 – Christophe

+1

@ Christophe補充說。 – emlai

+0

這樣做。顯然,我嘗試過的所有事情都不是其中之一。我仍在圍繞這個概念工作,但這至少是一個開始。感謝名單。 – user1325543