【发布时间】:2018-06-06 09:00:57
【问题描述】:
在模板函数中,我试图创建一个std::vector,其value_type 依赖于该函数的模板参数的成员函数。此模板参数被限制为包含具有特定功能的特定类型的唯一指针的向量。例如:
/* somewhere in the code */
std::vector< std::unique_ptr< Widget > > myVec;
/* work with myVec and fill it, then call the relevant function */
func(myVec);
现在函数func需要获取Widget的成员函数member_func的返回类型。注意Widget也可以是不同的类型,只要它有成员函数member_func。
template <typename Vec>
void func(const Vec& vec) {
using ret_type = decltype(Vec::value_type::element_type::member_func()); // Doesn't work
std::vector< ret_type > local_vec;
}
我尝试了各种方法,例如std::result_of、std::invoke_result 和 decltype,但我似乎无法让它工作。这是否可能,如果可以,如何实现?
【问题讨论】:
-
您只能在该类的实例上调用成员函数,而不能在类类型上调用成员函数(
...::element_type就是这样)。答案中使用的std::declval是在未评估(例如decltype)上下文中获取类型实例的惯用方式。
标签: c++ templates decltype result-of