#include<vector>
#include<functional>/span>
class SegmentTree final{
public:
template<typename T> using data_type=T。
public:
template<typename T=int>。
explicit SegmentTree(const size_type& size)。
};
我希望SegmentTree不是一個模板類,但有模板型別,并從建構式中推匯出這個型別。我能做到嗎?
uj5u.com熱心網友回復:
對于資料成員來說,不存在內部模板引數這樣的東西。如果一個資料成員依賴于一個型別模板引數,這樣的引數必須在類的簽名中可用。然而,這并不意味著你需要在實體化一個類時指定所有的模板引數,因為在c 17中,它們可以由建構式推匯出來,見這里。
示例:
#include <string>
template <typename U>
class A {
U m_data;
public:
A(U data) : m_data{data} { }.
};
int main()
{
A a(3); //此處 U = int
A b(std::string("hello")) ; // Here U = std::string
return 0;
}
測驗一下在Coliru上的直播。
。在上面的代碼中,我不需要(盡管我可以)在創建變數a和b時指定模板引數U。這是因為傳遞給建構式的變數型別被用來推導整個類的U。但是,A仍然是一個模板類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/316112.html
標籤:
下一篇:msvc和折疊表達
