2017-05-26 92 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