当返回值是模板类型时如何使用std::result_of



当Callable返回模板类型并得到以下错误(clang++)时,我试图使用result_of。我还包括了一个简单的情况下,一切都很好。

错误:

main.cpp:22:50: note: candidate template ignored: could not match '<type-parameter-0-1>' against 'std::__1::shared_ptr<int> (*)()'
typename std::result_of<FunctionType<T>()>::type submit(FunctionType<T> f) {
代码:

    int f() {
      int x = 1;
      return x;
    }
    template<typename T>
    std::shared_ptr<T> g() {
      std::shared_ptr<T> x;
      return x;
    }
    template <template<typename> class FunctionType, typename T>
    typename std::result_of<FunctionType<T>()>::type submit(FunctionType<T> f) {
      using result_type = typename std::result_of<FunctionType<T>()>::type;
      result_type x;
      return x;
    }
      template<typename FunctionType>
      typename std::result_of<FunctionType()>::type submit2(FunctionType f) {
        using result_type = typename std::result_of<FunctionType()>::type;
        result_type x;
        return x;
     }

    int main()
    {   
      submit(g<int>);  // error
      submit2(f);       // ok
      return 0;
    }

g<int>的类型为shared_ptr<int>(),由函数推导后衰减为指向该类型(shared_ptr<int>(*)())的指针。因此,submit中的FunctionType 不是模板,您不能在其上使用模板参数。

如果你能更清楚地说明你在做什么,我们就能想出一个解决你主要问题的办法。

相关内容

  • 没有找到相关文章

最新更新