我们在将代码移植到稍微不那么旧的 VC++ 2010 版本时遇到了问题。
该问题是由 VC 中的 map 实现引起的,这导致需要 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> );
}
生成以下消息:
模板参数 file.cc(x) 不适用于从基的指向成员的指针到派生的指向成员的标准转换:错误 C2973:'f':无效的模板参数'int std::_Pair_base<_Ty1, _Ty2>::* '
因此,似乎 in 的实现在基类value_type
中std::map
具有该对。
关于如何解决这个问题并将其保留pointer-to-member
为的任何想法non-type-argument
?
f
是我们改变结构的唯一选择functor
吗pointer-to-member
?