2015-02-09 56 views
2

我正在看以下帖子write a boost::multi_array to hdf5 dataset,無法理解Leo Goodstadt在第一個答案中使用的模板語法。不幸的是,我沒有足夠的聲譽直接評論給出的答案,這就是爲什麼我創建了這個單獨的問題。關於C++模板語法的解釋

據我瞭解,這是一個用靜態方法type()創建的結構,它返回相應的類型。

然後這個泛型結構被一個固定類型覆蓋。但是大括號裏面寫的是什麼,即它的含義是什麼?例如,什麼是下面的意思:

{ H5::IntType type { H5::PredType::NATIVE_CHAR 
        }; 
}; 

該炭模板的第一定義中:

template<> struct get_hdf5_data_type<char> { 
    H5::IntType type { 
     H5::PredType::NATIVE_CHAR  
    }; 
}; 

我複製的模板定義的基本部分的下方,但可能更容易查看原始帖子以獲得清晰的圖片。

template<typename T> struct get_hdf5_data_type { 
    static H5::PredType type() { 
     //static_assert(false, "Unknown HDF5 data type"); 
     return H5::PredType::NATIVE_DOUBLE; 
    } 
}; 
template<> struct get_hdf5_data_type<char> { 
    H5::IntType type { H5::PredType::NATIVE_CHAR }; 
}; 
template<> struct get_hdf5_data_type<long long> { 
    H5::IntType type { H5::PredType::NATIVE_LLONG }; 
}; 
template<> struct get_hdf5_data_type<unsigned long long> { 
    H5::IntType type { H5::PredType::NATIVE_ULLONG }; 
}; 
template<> struct get_hdf5_data_type<int8_t> { 
    H5::IntType type { H5::PredType::NATIVE_INT8 }; 
}; 
+5

*不幸的是,我沒有足夠的信譽直接評論給出的答案,這就是爲什麼我創建了這個單獨的問題。* - 哈利路亞,系統的工作原理!問題屬於新問題。 – chris 2015-02-09 21:38:37

回答

0

的捲曲語法初始化

H5::IntType type { H5::PredType::NATIVE_CHAR  }; 

類似於

H5::IntType type = H5::PredType::NATIVE_CHAR; 

我不熟悉的H5,但隨後的OP使用它作爲hdf_data_type.type這只是指的以前在專業化列表中定義的特定類型。

現在hdf_data_type需要是提供的模板專門化之一,get_hdf5_data_type<char>例如提供類型的定義。

通用模板中的註釋掉的static_assert可以用作未發現已知特化的標記,並且對象hdf_data_type沒有用處。

+0

謝謝你的回答,現在的語法對我來說很清楚。但不是方法類型()沒用,因爲當沒有發現已知的特化時,你會得到一個函數指針而不是類型? – Udo 2015-02-10 13:27:43

+0

我試圖編譯OP的代碼,但它看起來像這樣的語法不工作,因爲編譯失敗:** main.cpp:32:15:錯誤:函數定義不聲明參數** – Udo 2015-02-10 15:02:16

+0

@Udo至於你的第一個問題,這將取決於使用情況,但我的印象是,其目的是使用static_assert編譯失敗。不同的專業是不相關的類型。至於2 - 它可能值得一個新的問題,因爲我無法推斷錯誤指的是哪一行。 – 2015-02-10 17:18:07