1. 程式人生 > 其它 >C++ .template 關鍵字

C++ .template 關鍵字

技術標籤:C++筆記c++.template

template 關鍵字除了用於作為模板宣告之外,還有一個作用,顯式說明模板成員函式,這一點類似於typename 顯式說明成員型別。給出程式碼例項:

#include <iostream>

template<typename T, size_t N>
class Collection {
public:
    template<size_t I>
    void setValue(T &&t) {
        data[I] = t;
    }

    template<
size_t I> T getValue() const { return data[I]; } private: T data[N]; }; template<typename T, size_t N, size_t I> void printElem(Collection<T, N> &con) { // ==> 1 std::cout << con.template getValue<I>() << std::endl; } int main() { // 正常版本,這裡不用宣告.template
Collection<double, 2> con{}; con.setValue<0>(0.1); con.setValue<1>(1.5); std::cout << con.getValue<0>() << std::endl; printElem<double, 2, 1>(con); }

在上面程式碼1中,如果不加.template 關鍵字,則會報錯。這麼理解,printElem 是個模板函式,傳入的引數Collection 型別依賴於printElem 的模板引數。但是,1處在完成例項化填充之前,編譯器不會實際賦予模板實際的型別,因此這裡的.template

是用來告訴編譯器,I 是型別,而不是其他的資料,因此getValue 才會被編譯器認為是成員函式,而不是成員變數的。