如何获取模板参数方法的返回类型?

卢莫布兹

我正在尝试制作一个期望lambda作为输入的模板类,将其存储,还存储在lambdavector某些元素中type = return type但我不知道如何获取该类型,即使在构建实例时也知道lambda及其返回类型。

我希望在不提供模板参数(例如std::array a{1, 2, 3})的情况下构造该类我尝试过,decltype(F::operator(double x))但没有用。

#include <vector>

template<typename F>
struct Foo {
    using value_t = decltype(F::operator(double x))// <--- here I need to get the return type of the 
                                                 // call operator of F!
    Foo(const F& f) : _f(f), _vals(10, value_t{}), _has_vals(10, false) {}
    
    value_t operator()(int i) {
        if (_has_vals[i])
            return _vals[i];
        else {
            _has_vals[i] = true;
            _vals[i] = _f(i);
        }
    }
    
    F _f;
    std::vector<value_t> _vals;
    std::vector<bool> _has_vals;
};
#include <iostream>    

int main() {
    Foo foo([](double x){ return 42; }); // <--- here I know that the lambda returns an int!
    std::cout << foo(3) << "\n";
    return 0;
};
一些程序员哥们

decltype需要一个实际的调用表达式来获取返回类型,您不能真正可靠地从该类型中获取该返回类型F(例如,因为该类型F可能不是默认可构造的)。

您必须使用std::declval“创建”F您可以调用的实例

也许像

using value_t = decltype(declval<F>()(0.0));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java反射:获取方法的返回参数的类型

来自分类Dev

如何检查模板类方法的返回类型?

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

模板参数作为返回类型

来自分类Dev

如何创建返回类型的constexpr函数(用于模板参数)

来自分类Dev

Mockito:当方法的返回类型为void时,如何获取传递给方法的参数

来自分类Dev

Typescript:如何根据参数类型获取函数的返回类型?

来自分类Dev

如何获取最里面的模板参数类型?

来自分类Dev

如何获取非类型模板参数的值?

来自分类Dev

Java模板如何返回带有模板类型的函数参数类类型实例

来自分类Dev

从函数返回类型推断模板参数类型

来自分类Dev

从该方法参数的属性获取方法返回类型

来自分类Dev

如何在模板参数中分隔函数类型的返回类型和参数

来自分类Dev

如何使用Scala反射查找返回类型参数的方法的类型?

来自分类Dev

如何根据类方法的返回类型声明参数类型?

来自分类Dev

如何使用Scala反射查找返回类型参数的方法的类型?

来自分类Dev

如何从模板化类方法返回依赖类型?

来自分类Dev

自动,模板?如何构造返回不同数据类型的方法

来自分类Dev

如何获取类型参数?

来自分类Dev

如何获取类型参数?

来自分类Dev

在周围的建议中,如何获取建议方法的参数的“类型参数”

来自分类Dev

根据模板参数的类型返回值

来自分类Dev

模板参数类的函数调用的返回类型

来自分类Dev

具有先前模板参数类型的自动返回类型参数的函数类型的模板参数

来自分类Dev

如何从typedef获取模板类型

来自分类Dev

如何从参数化类型的方法参数获取参数化类型的类?

来自分类Dev

函数模板中返回类型的模板参数推导

来自分类Dev

C ++模板函数根据模板参数返回类型

Related 相关文章

  1. 1

    Java反射:获取方法的返回参数的类型

  2. 2

    如何检查模板类方法的返回类型?

  3. 3

    如何获取函数返回类型的模板成员的解引用类型

  4. 4

    如何获取函数返回类型的模板成员的解引用类型

  5. 5

    模板参数作为返回类型

  6. 6

    如何创建返回类型的constexpr函数(用于模板参数)

  7. 7

    Mockito:当方法的返回类型为void时,如何获取传递给方法的参数

  8. 8

    Typescript:如何根据参数类型获取函数的返回类型?

  9. 9

    如何获取最里面的模板参数类型?

  10. 10

    如何获取非类型模板参数的值?

  11. 11

    Java模板如何返回带有模板类型的函数参数类类型实例

  12. 12

    从函数返回类型推断模板参数类型

  13. 13

    从该方法参数的属性获取方法返回类型

  14. 14

    如何在模板参数中分隔函数类型的返回类型和参数

  15. 15

    如何使用Scala反射查找返回类型参数的方法的类型?

  16. 16

    如何根据类方法的返回类型声明参数类型?

  17. 17

    如何使用Scala反射查找返回类型参数的方法的类型?

  18. 18

    如何从模板化类方法返回依赖类型?

  19. 19

    自动,模板?如何构造返回不同数据类型的方法

  20. 20

    如何获取类型参数?

  21. 21

    如何获取类型参数?

  22. 22

    在周围的建议中,如何获取建议方法的参数的“类型参数”

  23. 23

    根据模板参数的类型返回值

  24. 24

    模板参数类的函数调用的返回类型

  25. 25

    具有先前模板参数类型的自动返回类型参数的函数类型的模板参数

  26. 26

    如何从typedef获取模板类型

  27. 27

    如何从参数化类型的方法参数获取参数化类型的类?

  28. 28

    函数模板中返回类型的模板参数推导

  29. 29

    C ++模板函数根据模板参数返回类型

热门标签

归档