我在插入一些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