[英]Deducing the function return type from its parameter's return type
我有下面的代码
template<typename U, typename F >
U GetListAndSearchName( F listGetter, const std::string& stringName )
{
std::vector<UserType> newList;
for ( size_t i = 0; i < myList.size(); i++)
{
const std::vector<U>& list = listGetter(myList[i]);
for ( size_t i = 0; i < list.size(); i++ )
{
if ( list[i]->GetName() == stringName )
return list[i];
}
}
return U();
}
甚至U存在于我的函数指针的返回类型中,它是模板参数F(我以后使用std :: mem_fn来创建它可能也是std :: function)当前我需要显式地将U的类型传递给编译器。
如何让我的旧Vs2010编译器推断出U的类型?
2010年的作品:
template<typename F>
auto GetListAndSearchName (F listGetter, const std::string& stringName)
-> decltype(listGetter(myList[0])[0])
您需要使用decltype和尾随返回类型。 它们都是C ++ 11的功能,但根据MSDN,它们应该得到Visual Studio 2010的支持。您还需要一个类型特征来从vector中提取value_type。
template<typename T>
struct value_type { typedef T::value_type type; };
template<typename F>
auto GetListAndSearchName( F listGetter, const std::string& stringName )
-> typename value_type<decltype(listGetter(myList[0]))>::type
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.