gpt4 book ai didi

c++ - 类成员函数的返回值类型

转载 作者:行者123 更新时间:2023-11-28 05:11:35 25 4
gpt4 key购买 nike

我有几个 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:\_data\work\vmxi\c++\vox\vox\template_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 中,一些类型特征获得了 using。包含 typename 的别名关键字给你。这些别名总是与特征同名,带有 _t后缀。

尝试:

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

或者,对于 C++14:

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

关于c++ - 类成员函数的返回值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43398169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com