VC++ の少し古いバージョン 2010 にコードを移植する際に問題があります。
この問題は、VC でのマップの実装が原因で発生します。これにより、派生した a の基本変換pointer-to-member
がnon-type-argument
必要になります。
#include <map>
#include <algorithm>
template <typename MapValueType, int MapValueType::*var>
bool f (MapValueType const & v);
int main ()
{
typedef std :: map<int, int> MapType;
MapType m;
std :: find_if (m.begin ()
, m.end ()
, f<MapType::value_type, & MapType::value_type::second> );
}
次のメッセージが生成されます。
base のポインターからメンバーへの標準変換は、テンプレート引数 file.cc(x) には適用されません: エラー C2973: 'f': 無効なテンプレート引数 'int std::_Pair_base<_Ty1, _Ty2>::* '
value_type
したがって、 inの実装はstd::map
基本クラスにペアがあるようです。
これを解決し、を維持する方法についてのアイデアはpointer-to-member
ありnon-type-argument
ますか?
メンバーを持つf
ように構造を変更する唯一のオプションですか?functor
pointer-to-member