C ++如何在没有std :: function的情况下声明函数返回函数?

雷宾·卡宾

尝试一些构图的想法,我有

#include <iostream>
#include <functional>

using namespace std;

struct A { };
struct B { };
struct C { };

B b4a (A a) {   B b; return b;   }
C c4b (B b) {   C c; return c;   }

template <typename R, typename S, typename T>
function<R(T)> composition
(   R(r4s)(S)
,   S(s4t)(T)   ) 
{   return [=] (T t) {   return r4s (s4t (t));  };  }

int main()
{
    cout << "b4a : " << type_name<decltype(b4a)>() << endl;
    cout << "c4b : " << type_name<decltype(c4b)>() << endl;
    auto c4a = composition<C, B, A> (c4b, b4a);
    cout << "c4a : " << type_name<decltype(c4a)>() << endl;
    auto lb4a = [=] (A a) { B b; return b; };
    auto lc4b = [=] (B b) { C c; return c; };
    auto lc4a = composition<C, B, A>(lc4b, lb4a);
    cout << "lc4a : " << type_name<decltype(lc4a)>() << endl;
}

(的定义type_name有点题外话,但您可以在此处看到以上内容的完整工作示例)。

您会看到此composition运算符可用于的函数指针b4a和的lambda lb4a我想摆脱的function<R(T)>返回类型composition,而直接声明其类型,但是我不知道如何以其他方式表示其返回类型。尝试中

R(composition)(T)

要么

R(*composition)(T)

要么

R(&composition)(T)

产生'composition' declared as function returning a function,导致我怀疑这是不可能的。线索?

沃恩·卡托

Lambda具有唯一但未指定的类型。一种可能的解决方法是不使用lambda,而是创建自己的等效类:

template <typename R, typename S, typename T>
struct Composition {
    R (*r4s)(S);
    S (*s4t)(T);
    R operator()(T t) const { return r4s(s4t(t)); }
};

template <typename R, typename S, typename T>
Composition<R,S,T> composition(R (*r4s)(S),S(*s4t)(T)) 
{   
    return {r4s,s4t};
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++如何在没有std :: function的情况下声明函数返回函数?

来自分类Dev

如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

来自分类Dev

C ++构造函数-如何在没有新知识的情况下启动?

来自分类Dev

C++:如何在不定义的情况下声明非函数?

来自分类Dev

C ++:是否有可能在没有返回的情况下终止非无效函数?

来自分类Dev

C ++使用std :: function从名称空间中返回函数

来自分类Dev

如何在不复制对象的情况下公开将C ++对象返回给Python的函数?

来自分类Dev

如何在没有外部返回内部函数的情况下访问函数内部函数

来自分类Dev

C ++在技术上如何在没有副本的情况下移动函数返回值?

来自分类Dev

C ++在技术上如何在没有副本的情况下移动函数返回值?

来自分类Dev

有没有办法在不返回函数的情况下更改列表?(排序功能)

来自分类Dev

有没有办法在不使用void指针的情况下返回C函数中的任何类型?

来自分类Dev

如何在不实现函数的情况下声明函数?

来自分类Dev

如何在没有std :: string中介的情况下创建支持通过C字符串查找的set <string>?

来自分类Dev

如何在没有函数体的情况下打印函数的返回字符串?

来自分类Dev

如何在没有赋值的情况下声明const但在函数中赋值

来自分类Dev

在没有C11线程的情况下,C标准库函数是否是线程安全的?

来自分类Dev

继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

来自分类Dev

在C中没有stdarg.h的情况下访问函数中的未命名参数

来自分类Dev

C ++类:在没有构造函数重载的情况下初始化属性

来自分类Dev

在不键入每个成员的情况下将struct传递给函数(C ++没有指针)

来自分类Dev

在C ++中没有任何内置函数的情况下从数组中删除元素

来自分类Dev

声明的C函数如何没有实现?

来自分类Dev

如何在不使用标准C库的情况下使用编译器内置函数

来自分类Dev

如何在c中不使用任何递归函数的情况下遍历目录?

来自分类Dev

如何在不使用C的指针的情况下通过函数传递2D数组

来自分类Dev

如何在不使用member.functionName语法C ++的情况下访问成员函数?

来自分类Dev

从std :: function继承构造函数时,“函数返回函数”

来自分类Dev

如何在没有P / Invoke的情况下从c#创建挂起的进程?

Related 相关文章

  1. 1

    C ++如何在没有std :: function的情况下声明函数返回函数?

  2. 2

    如何在不使用C语言中使用typedef的情况下声明将指针返回到返回函数指针的函数的函数?

  3. 3

    C ++构造函数-如何在没有新知识的情况下启动?

  4. 4

    C++:如何在不定义的情况下声明非函数?

  5. 5

    C ++:是否有可能在没有返回的情况下终止非无效函数?

  6. 6

    C ++使用std :: function从名称空间中返回函数

  7. 7

    如何在不复制对象的情况下公开将C ++对象返回给Python的函数?

  8. 8

    如何在没有外部返回内部函数的情况下访问函数内部函数

  9. 9

    C ++在技术上如何在没有副本的情况下移动函数返回值?

  10. 10

    C ++在技术上如何在没有副本的情况下移动函数返回值?

  11. 11

    有没有办法在不返回函数的情况下更改列表?(排序功能)

  12. 12

    有没有办法在不使用void指针的情况下返回C函数中的任何类型?

  13. 13

    如何在不实现函数的情况下声明函数?

  14. 14

    如何在没有std :: string中介的情况下创建支持通过C字符串查找的set <string>?

  15. 15

    如何在没有函数体的情况下打印函数的返回字符串?

  16. 16

    如何在没有赋值的情况下声明const但在函数中赋值

  17. 17

    在没有C11线程的情况下,C标准库函数是否是线程安全的?

  18. 18

    继承List <T>时,如何在没有构造函数的情况下将数据传递给父类?C#

  19. 19

    在C中没有stdarg.h的情况下访问函数中的未命名参数

  20. 20

    C ++类:在没有构造函数重载的情况下初始化属性

  21. 21

    在不键入每个成员的情况下将struct传递给函数(C ++没有指针)

  22. 22

    在C ++中没有任何内置函数的情况下从数组中删除元素

  23. 23

    声明的C函数如何没有实现?

  24. 24

    如何在不使用标准C库的情况下使用编译器内置函数

  25. 25

    如何在c中不使用任何递归函数的情况下遍历目录?

  26. 26

    如何在不使用C的指针的情况下通过函数传递2D数组

  27. 27

    如何在不使用member.functionName语法C ++的情况下访问成员函数?

  28. 28

    从std :: function继承构造函数时,“函数返回函数”

  29. 29

    如何在没有P / Invoke的情况下从c#创建挂起的进程?

热门标签

归档