C++ 获取模板化对象的返回类型';s法

C++ 获取模板化对象的返回类型';s法,c++,templates,template-meta-programming,return-type,result-of,C++,Templates,Template Meta Programming,Return Type,Result Of,说我有: template <typename T> struct Foo { T& func(); }; 模板 结构Foo{ T&func(); }; 我实现了一个Foo:foobar现在我想得到返回类型bar.func()。我一直试图强迫自己和自己一起工作,但没有结果 我真正想要的是能够做result\u of \u t,并用它来完成,但我认为这要困难得多?我应该如何获取这种返回类型 编辑: 我希望在不考虑bar是如何声明的情况下实现这一点。也就是说,我只希望

说我有:

template <typename T>
struct Foo {
    T& func();
};
模板
结构Foo{
T&func();
};
我实现了一个
Foo
foobar
现在我想得到返回类型
bar.func()
。我一直试图强迫自己和自己一起工作,但没有结果

我真正想要的是能够做
result\u of \u t
,并用它来完成,但我认为这要困难得多?我应该如何获取这种返回类型

编辑: 我希望在不考虑
bar
是如何声明的情况下实现这一点。也就是说,我只希望能够将
bar.func
传递到
result\u的
code>或类似内容中,并导出返回类型。

实际使用起来非常烦人。其语法是:

 result_of<F(ArgTypes...)>
或者我们可以使用
decltype

using T = decltype(std::declval<Foo<int>&>().func());
与之相反:

using T = std::result_of_t<decltype(&decltype(bar)::func)(decltype(bar))>;
使用T=std::T的结果;

你有什么不起作用的例子吗?@Barry给了你一个解决方案,你可以使用模板声明来解释任何
Foo
。然后,无论何时使用它来提供模板参数,您都必须调用
decltype()
。@bku\u drytt我想您正在回答我提出的问题。但是如果我这样做:
result\u of t
我会得到错误:“错误C2893:未能专门化函数模板‘未知类型std::invoke(_Callable&,_Types&&&……’”@JonathanMee您有额外的参数。Just
decltype(&decltype(bar)::func)
这是一个很好的答案,因为我没有在问题中指定,但是如果我不知道
bar
的模板化类型,有没有办法做到这一点?希望这个问题有意义,我问的是关于
T
未知的情况,但是我有
bar
@JonathanMee,所以只要
decltype(bar.func())
?当然就这么简单了。我只是想用
result\u来做这件事,谢谢你帮我看清了真相。你能把它加到你的答案里吗?我愿意接受,但我不想让任何人在评论中漏掉它。@JonathanMee你能补充一下你的问题吗,那才是你真正想要的吗?
using T = decltype(bar.func());
using T = std::result_of_t<decltype(&decltype(bar)::func)(decltype(bar))>;