我在插入一些value_pairs到地图时遇到了问题。这是基本的想法。将<string,function pointer>插入地图
// private
typedef Foo* (*Bar)(const std::string &x, int y);
typedef std::map<std::string, Bar> myMap;
template<class T>
Foo* DoThing(const std::string &x, int y) {
return new T(x, y);
}
myMap m_map;
// some map insertion code
m_map.insert(myMap::value_type("blah", &DoThing<SomeType>));
m_map.insert(myMap::value_type("blech", &DoThing<OtherType>));
这将使编译错误说no matching function call to std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Foo* (*)(const std::string&, int)>::pair(const char [5], <unresolved overloaded function type>)
不知道我在做什么语法错误,或者为什么我得到了unresolved overloaded function type
。我最好的猜测是它不知道DoThing
返回Foo*
。
任何帮助表示感谢,谢谢。
不能用g ++重现。 – kennytm 2010-06-26 06:13:11
我正在使用g ++。嗯..使模板功能更具体一点。 – ggg 2010-06-26 06:16:48
可以肯定的是,'DoThing'是一个全局函数,不是任何类的成员,对吧?如果它在类中,它需要是一个静态成员函数。 –
2010-06-26 06:24:23