获取模板化对象方法的返回类型

2024-01-29

说我有:

template <typename T>
struct Foo {
    T& func();
};

我实现了一个Foo: Foo<int> bar现在我想获取返回类型bar.func()。我一直在努力强迫result_of http://en.cppreference.com/w/cpp/types/result_of与我合作但无济于事。

我真正想要的是能够做result_of_t<foo.func>并完成它,但我想它要困难得多?我应该如何获取这个返回类型?

EDIT:我希望能够实现这一点,而不考虑如何bar被宣布。也就是说,我只想能够通过bar.func into result_of或类似并 gt 输出返回类型。


std::result_of http://en.cppreference.com/w/cpp/types/result_of实际上使用起来很烦人。其语法为:

 result_of<F(ArgTypes...)>

Where F是可调用的东西,这里的一切都是类型。在您的情况下,您想要调用成员函数:&Foo<int>::func。但这不是value您需要的指向成员的指针,但类型。所以我们想要decltype(&Foo<int>::func)。调用成员函数的方法是将对象的实例作为第一个参数传递。

把它们放在一起,我们得到:

using T = std::result_of_t<decltype(&Foo<int>::func)(Foo<int>&)>;
static_assert(std::is_same<T, int&>::value, "!");

或者我们可以使用decltype:

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

这更自然。


Given bar,那就是:

using T = decltype(bar.func());

与以下相反:

using T = std::result_of_t<decltype(&decltype(bar)::func)(decltype(bar))>;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取模板化对象方法的返回类型 的相关文章

随机推荐