もともとMicrosoftVisualStudio(VS)2003で記述されたC++コードをVS2008でコンパイルしようとしていますが、char配列の先頭にvector::iteratorを割り当てるための効率的な解決策を見つけるのに問題があります。イテレータが単純なポインタ型(T *)として定義されていたものから、VS2003とVS2005の間のクラス型に変わったことを知っています。これが私が話していることの簡単な例です。
typedef std::vector<char> CharContainer;
typedef CharContainer::iterator InputIt;
int FindNumMsgs( InputIt _inputIter, int _len );
int ProcessBufferForMsgs( char buf[], const size_t maxlen )
{
int numMsgs = FindNumMsgs( InputIt(buf), maxlen );
...
}
したがって、VS 2003では、これは問題なくコンパイルおよび動作します(イテレータはT *として定義されているため)。VS 2008では、bufポインターを使用してイテレーターを割り当てることができなくなったため、C2440(function-style-cast)でこのエラーが発生しました。イテレータがクラスタイプになったので、これをVS 2008で機能させるにはどうすればよいですか?バッファーをベクターにコピーしてからmyVec.begin()を渡すこともできますが、このオーバーヘッドを回避できると考えなければなりません。