类成员函数的返回值类型

Return value type for class member function

本文关键字:返回值 类型 函数 成员      更新时间:2023-10-16

我有几个A,比如带有方法的类,比如get_value(),它返回不同类型的值。还有一个类B ,它返回一个带有方法 value() 的值。例如:

struct A_like1 {
    int get_value() const { return 10; }
};
struct A_like2 {
    char get_value() const { return 'a'; }
};
struct B
{
    float value() const { return 2.5; }
};

现在,我需要一个函数来检索这些类的值。我有一个功能:

template<typename T>
auto get_value(const T & t) -> result_of<decltype(&T::get_value)(T)>::type
{
    return t.get_value();
}

它给了我许多VS2010上的编译错误,首先是:

Error   1   error C2061: syntax error : identifier 'type'   c:_dataworkvmxic++voxvoxtemplate_specialization.h    51

对于B我有一个过载,这工作正常。问题是,如何使get_value()result_of<>()一起工作?

附言嗯,我刚刚意识到我可以用-> decltype(T().get_value())代替,这工作正常。但是为什么result_of<>()不起作用呢?此外,我能够在.cpp文件中声明一个变量:

result_of<decltype(&A_like1::get_value)(A_like1)>::type i=0;

关键字 typename 可用于声明依赖名称(如 std::result_of<T>::type(是一个类型。否则,我相信假定std::result_of<T>::type是数据成员。在 C++14 中,几个类型特征获得了包含 typename 关键字的using别名。这些别名始终与特征具有相同的名称,并带有_t后缀。

尝试:

typename result_of<decltype(&T::get_value)(T)>::type

或者,使用 C++14 :

result_of_t<decltype(&T::get_value)(T)>