如何创建C++;相互返回的函数? 我想在C++中有几个函数,其中每个函数代表程序中的一个屏幕。这些函数处理用户交互,并在此基础上将std::function返回给其他函数之一,通过std::bind绑定参数,以便无需参数即可调用返回值。通过这个过程可以从任何函数到任何其他函数,而无需使用递归-主函数将是一个无限循环,只需反复调用返回的函数

如何创建C++;相互返回的函数? 我想在C++中有几个函数,其中每个函数代表程序中的一个屏幕。这些函数处理用户交互,并在此基础上将std::function返回给其他函数之一,通过std::bind绑定参数,以便无需参数即可调用返回值。通过这个过程可以从任何函数到任何其他函数,而无需使用递归-主函数将是一个无限循环,只需反复调用返回的函数,c++,function,c++11,function-pointers,c++14,C++,Function,C++11,Function Pointers,C++14,但是我在这里被难住了——对于这些函数,返回类型的定义应该是什么?它们需要返回不带参数的std::function对象,但这是我所能得到的标准::函数?C++没有任何直接或间接包含自身的函数类型。您需要某种方法来避免类型定义中的递归 一种方法是不返回函数。相反,返回一个包含函数的结构。包含函数指针的自包含示例: struct wrapper { wrapper (*function)(); }; wrapper f1(); wrapper f2(); wrapper f1() { return

但是我在这里被难住了——对于这些函数,返回类型的定义应该是什么?它们需要返回不带参数的
std::function
对象,但这是我所能得到的<代码>标准::函数?

C++没有任何直接或间接包含自身的函数类型。您需要某种方法来避免类型定义中的递归

一种方法是不返回函数。相反,返回一个包含函数的结构。包含函数指针的自包含示例:

struct wrapper { wrapper (*function)(); };

wrapper f1();
wrapper f2();

wrapper f1() { return {f2}; }

同样的方法也适用于
std::function

这里看起来像是面向对象的工作,返回一个对象而不是函数..我不太清楚你的意思。如果要返回不带参数的函数,可以将该函数的返回值设置为
std::function
。使用该返回值,您甚至可以返回lambda或可调用对象(functor)。
{f2}
std::initializer\u list
对象吗?这是否意味着这将隐式调用
包装器的构造函数?但是为什么不仅仅是
返回f2
,我认为它还将隐式转换为
包装器
@allankunzi它是一个初始化器列表,尽管名称不是
std::initializer\u list
对象。它使用聚合初始化,而不是隐式转换。如果您尝试
返回f2您应该会看到编译器错误。