2017-05-26 91 views
2
#include <string_view> 

class str_ref : public std::string_view 
{ 
public: 
    using std::string_view::string_view; 
}; 

int main() 
{ 
    std::string_view sv; 
    str_ref sr("", 0); 
    str_ref sr2(sv); // error C2664: 'str_ref::str_ref(const str_ref &)': cannot convert argument 1 from 'std::string_view' to 'const char *const ' 
} 

爲什麼(string_view)的構造函數在這裏找不到?不應該使用using語句導入此構造函數嗎? (const char *,size_t)構造函數正在被找到。 我正在使用VS2017。構造函數從基地找不到

+0

,因爲它是一個模板類 – dgrat

+0

@dgrat你能否解釋有關? –

+0

@dgrat不,它不是。 'std :: string_view'是'std :: basic_string_view >' – iehrlich

回答

0

不應該使用using語句導入此構造函數嗎?

它被正確導入,但你必須自己在派生類中定義該構造函數。
編譯器不會自動生成這樣的派生類的構造函數:

#include <string_view> 

class str_ref : public std::string_view 
{ 
public: 
    using std::string_view::string_view; 
    str_ref(const std::string_view& sv) : std::string_view(sv) {} // <<<< 
}; 

int main() 
{ 
    std::string_view sv; 
    str_ref sr("", 0); 
    str_ref sr2(sv); 
} 

Live Demo

+0

完全專業化對不起,但是發佈重複答案(是的,我看到代碼)重複的問題?你可以關閉重複的東西,對吧? – iehrlich

+0

@iehrlich當我寫答案時,我沒有發現這個謎。也有重複提問的問題本質上並不壞。這些可能成爲未來研究的標誌。 –

+0

當然,沒問題:) – iehrlich