一些遗留代码如下所示:
#include <boost/array.hpp>
boost::array<wchar_t, 1000> data;
void func(std::wstring &str)
{
str.assign(data.begin());
}
我正在更新代码以使用我们更新到 C++17 的std
等效boost
项,我认为array
这是一个直接替换,但是当我尝试这个时,我得到一个编译错误:
#include <array>
std::array<wchar_t, 1000> data;
void func(std::wstring &str)
{
str.assign(data.begin());
}
错误 C2664: 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>> &std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>> ::assign(std::initializer_list<_Elem>)':无法使用 [ _Elem=wchar_t ] 和 [ _Ty= 将参数 1 从 'std::_Array_iterator<_Ty,2001>' 转换为 'std::initializer_list<_Elem>' wchar_t ] 和 [ _Elem=wchar_t ]
我们在代码库的很多地方都使用了这种模式,是否有一个简单的修复?两者之间的具体区别是什么boost::array
,std::array
导致这种情况的原因是什么,这是否意味着它不能被视为直接替代品?
(这段代码不是我写的。我不知道为什么我们不只是使用wchar_t[]
;也许作者只是喜欢 boost 中的“新”功能。)