2

一部のレガシー コードは次のようになります。

#include <boost/array.hpp>

boost::array<wchar_t, 1000> data;

void func(std::wstring &str)
{
 str.assign(data.begin());
}

stdC++ 17 に更新するときに同等のものを使用するようにコードを更新しています。直接の置き換え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具体的にはとwhichの違いは何ですか?std::arrayこれは、ドロップイン交換とは見なされないことを意味しますか?

(私がこのコードを書いたわけではありません。また、なぜ単に を使用しないのかわかりませんwchar_t[]。おそらく、作成者はブーストの「新しい」機能が気に入っただけです。)

4

1 に答える 1