当前位置: 首页 > 知识库问答 >
问题:

“std::result_of”中没有名为“type”的类型;从重载函数中获取返回类型

年业
2023-03-14

我正在学习如何获取重载函数test()vstest(double)的返回值的type

我修改了SO答案中的代码(由chris编写)。

#include <type_traits>
#include <utility>

int test();
double test(double x);

template<typename... Ts>
using TestType = decltype(test(std::declval<Ts>()...))(Ts...);

int main() {
    std::result_of< TestType<double> >::type n = 0;
     //^ ### compile error ###
    using doubleDat = std::result_of< TestType<double> >::type ;
    doubleDat n=0;
}

我有一个编译错误。

错误:“std::result\u of”中没有名为“type”的类型

据我所知:-

>

  • 测试类型

    TestType

    问:为什么它不编译?怎么解决呢?

    我读过:-

    • 重载成员函数的decltype-没有关于std::result\u的示例

    线索:经过长时间的搜索,我隐约感觉到我的代码遭受了“最令人烦恼的解析”。


  • 共有1个答案

    商和颂
    2023-03-14

    看看你的TestType是什么

    test(std::declval<double>())(double)
    

    测试d::decvlal

    的结果

    答案是否定的,因为double不可调用,所以没有嵌套类型。

    您需要阅读result_of的留档以了解如何使用它。类型result_of

    因此,这将起作用:

    using func_type = TestType<double>;
    using doubleDat = std::result_of<func_type*(double)>::type;
    

    这将为类型为TestType的函数创建别名

     类似资料:
    • 我目前正在学习C#,有人告诉我,可以使用explicit关键字重载方法返回类型,但他从未解释过如何重载。我搜索了所有地方,也阅读了一些关于stackoverflow的问题和答案,但我没有发现这样的事情,而且,在大多数情况下,回答的人说不可能通过返回类型重载方法。在这一切之后,我开始认为没有这种可能性。现在有人真的知道如何通过使用explicit关键字来重载方法返回类型了吗?或者这是可能的吗?先谢谢

    • 问题内容: 我有一个返回记录类型的函数。 我想从Java代码中调用此函数,并在Java中获取该记录类型。请指导我如何做。谢谢 问题答案: 首先让我们从更正您的代码开始。我可以看到您发布的代码无法编译,并且会引发问题。正确的代码如下: 执行此代码时,您可能会遇到类似的问题。这是因为a 仅限在中使用。 ORA-00902:无效的数据类型 最好的方法是先创建一个对象的a 和a ,然后在您的函数中创建它:

    • 我有一个匿名函数,如下所示: 我想指定cb必须返回一个布尔值,但我是一个打字稿新手,不知道我是否可以(或者即使我这样做或不这样做会对解析器产生影响)。 我该怎么做?

    • 我正在尝试在Linux中编译这个repo,但在这一步中遇到了一些麻烦。 *util/BinarySerialization.hpp *序列化/ElementBS.cpp *xdlrc/model/Element.hpp util/BinarySerialization。hpp:在'typename boost::disable_if'的实例化中 ElementB中的第一个writeBinary。c

    • 问题内容: JDK中是否有一个标准功能接口,该接口什么都不做,什么也不返回?我找不到一个。类似于以下内容: 问题答案: 那么Runnable呢:

    • 如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?