多項式の係数を表すためにstd :: vectorの周りに小さなラッパークラスを作成しようとしています。呼び出し元は係数を反復処理できる必要がありますが、基本的な実装を公開したくありません。パターンを使用両方のメソッドが利用可能であっても、コンパイラはVector_const_iteratorとVector_iteratorを "変換"できません
はhere、hereを説明し、他の場所で、私は以下のようにイテレータに沿って通過するように試みた:
:typedef std::vector<unsigned char> charVec;
class gf255_poly
{
public:
// Constructors and Polynomial-y Functions
// ...
// Iterators to go from high to low degree
charVec::const_reverse_iterator h2l_begin() const { return p.rbegin(); };
charVec::const_reverse_iterator h2l_end() const { return p.rend(); };
charVec::reverse_iterator h2l_begin() { return p.rbegin(); };
charVec::reverse_iterator h2l_end() { return p.rend(); };
// Iterators to go from low to high degree
charVec::const_iterator l2h_begin() const { return p.begin(); };
charVec::const_iterator l2h_end() const { return p.end(); };
charVec::iterator l2h_begin() { return p.begin(); };
charVec::iterator l2h_end() { return p.end(); };
protected:
std::vector<unsigned char> p;
};
これらgf255_polyオブジェクトは、その後、このいずれかのような方法に慣れます
// Performs polynomial evaluation in GF(2^8)
unsigned char gf255_poly_eval(const gf255_poly &poly, unsigned char x) const
{
unsigned char fx = poly.coefHigh(); // Initialize with coef of highest degree term
// Use Horner's method with consecutively factored terms:
// x^3 + 2x^2 + 3x + 4 -> (((1x + 2)x + 3)x + 4)
charVec::reverse_iterator next_coef;
for (next_coef = poly.h2l_begin(); next_coef != poly.h2l_end(); next_coef++)
fx = gf255_mul(fx, x)^*next_coef; // Recall^is addition in GF 2^8
return fx;
}
シンプルですが、タイプに問題があります。 Visual Studioは私がパズルのように見えることができないためのループ、との行に私は、このエラーを与える:
error C2664: 'std::_Revranit<_RanIt,_Base>::_Revranit(_RanIt)' : cannot convert parameter 1 from 'std::_Vector_const_iterator<_Ty,_Alloc>' to 'std::_Vector_iterator<_Ty,_Alloc>'
私はこのメッセージを理解していない - 私は両方のイテレータを返すメソッドを提供してきましたし、 const_iterators。なぜコンパイラはそれらの間で選択できないのですか?この質問で暗黙
が、これは(彼らはまだこれらのstd ::ベクトルの種類に対処する必要があるため)、すべての発信者から詳細を隠すための良い戦略があるかどうかである、と私は答えをいただければ幸いいますこれにも対処してください。
、C++ 11 ISN」を現在のところオプションです。デベロッパーの皆さんはVSへのアップグレードを希望していますが、実際には起こるという兆候はありません。それでも、新しい機能を追求するための徹底的な答えと弾薬に感謝します! – Bear