从参数的 return 类型推导出函数 return 类型

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 也存在于我的函数指针的 return 类型中,它是模板参数 F(我正在使用 std::mem_fn 稍后创建它 F 也可能是 std::function )目前我是需要将 U 的类型显式传递给编译器。

如何让我的旧 Vs2010 编译器推断出 U 的类型?

您需要使用 decltype 和尾随 return 类型。它们都是 C++11 特性,但根据 MSDN,它们应该受到 Visual Studio 2010 的支持。您还需要一个类型特征来从向量中提取 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

2010年作品:

template<typename F>
auto GetListAndSearchName (F listGetter, const std::string& stringName) 
  -> decltype(listGetter(myList[0])[0])