0

データベースクラスがファイルからデータを読み取るために書いている次のコードがあります。

typedef std::vector<char> CharVec;
typedef std::vector<const char> ConstCharVec;
typedef std::shared_ptr<CharVec> CharVecPtr;
typedef std::shared_ptr<ConstCharVec> ConstCharVecPtr;

const ConstCharVecPtr DB::readData(unsigned int amount,unsigned int offset,unsigned int flag)
{
    CharVec data;
    //Add stuff to data from the file...
    //etc...
    return ConstCharVecPtr(new ConstCharVec(data.begin(),data.end()));
}

return ステートメントは、コンパイル中に次のように失敗します。

include\c++\bits\allocator.h|89|  required from 'class std::allocator<const char>'|
include\c++\bits\alloc_traits.h|86|  required from 'struct std::allocator_traits<std::allocator<const char> >'|
include\c++\ext\alloc_traits.h|90|  required from 'struct __gnu_cxx::__alloc_traits<std::allocator<const char> >'|
include\c++\bits\stl_vector.h|76|  required from 'struct std::_Vector_base<const char, std::allocator<const char> >'|
include\c++\bits\stl_vector.h|208|  required from 'class std::vector<const char>'|
C:\Users\Brian\work\cr\code\DB.cpp|86|  required from here|

他の関数はデータベースからの生データが一定であることを期待しているため、戻り値の定数性を維持したいのですが、非定数データを定数に変換することはできません。char ベクトルは、生データのユーザーが const char* ポインターを必要とする関数に簡単にフィードできるように、戻り値として使用されます。この const 変換を達成する方法はありますか、またはこの種のデータに別の戻り値の型を使用する方がよいでしょうか?

4

0 に答える 0