问题标签 [boost-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6047 浏览

c++ - boost 函数和 lambda 来包装一个函数

我想转换这个简单的代码:

类似的东西,为了不在外面声明 setZComp 而是某种内联声明

我对 Boost Bind 和 Lambda 很陌生,我不知道这是否可以通过某种方式完成。显然上面的代码不起作用。

0 投票
0 回答
96 浏览

c++ - 如何保存可变参数函数的注册表

我将解释我正在尝试做的事情:

我正在开发一款游戏。为了处理图形,我有一堆我更新和绘制的 ScreenLayers。ScreenLayer 负责为游戏的某些方面(库存、派对概览、世界地图、瓷砖地图等)提供可视化。

为了处理屏幕转换,我想为各种屏幕类型创建一个函数注册表,然后屏幕将调用此注册表以从绘图堆栈中推送和弹出屏幕图层。(即,当在瓦片地图上时,如果您按下开始,瓦片地图将调用注册表并告诉它创建一个根开始菜单屏幕。开始菜单将被推到瓦片地图的顶部并控制输入直到开始菜单关闭,此时它会从堆栈中弹出并将控制权交还给调用它的层)

问题是每个屏幕层都需要一组不同的参数来构造它

IE

对比

理想情况下,我希望每个屏幕都能够注册一个小功能,将我的屏幕层包裹起来并使其成为适当的 ScreenStack

IE

我需要一种方法来注册接受可变参数的 ScreenStack 创建函数,并且如果可能的话,允许每个 ScreenLayer 派生类自己注册这个堆栈创建函数。

我最初的想法是尝试这样的事情:

但是, boost::function 不适用于<cstdarg>. 此外,在尝试实例化它们之前,我无法看到预注册屏幕。

我考虑过在 boost::function 上切换到一些通用的 void 函数指针,但如果我可以避免这样做,我想这样做。我认为可以使用预处理器进行堆栈注册,但我对预处理器没有很多经验,所以我不知道如何做到这一点。

我正在考虑使用工厂来创建屏幕堆栈,但是随着我添加越来越多的屏幕图层类型和各种参数,我必须不断更新工厂函数,所以这似乎不是一个很好的解决方案。

如果有人可以帮助我,将不胜感激。如果我不清楚某事,请告诉我

0 投票
1 回答
1240 浏览

c++ - 使用 boost::bind 实现无操作函子

我有一个功能void get(boost::function<void(void)> callback) { callback(); }。我想在get(boost::bind(/* don't know what to put here*/));不实现任何其他函数、变量或结构的情况下进行调用,以便回调什么都不做。是否可以在C++03中实现这样的“无操作”回调?

使用 ofboost::bind()是首选但不是必需的 - 可能是,还有一些其他技巧可以实现我的目标。

0 投票
1 回答
345 浏览

c++ - boost::function 如何支持不同长度模板参数的模板类

我想使用 boost 预处理器来声明具有不同模板变量长度的模板类,基本上就像 boost::function 所做的那样。

上面的代码显然不会工作,因为它在同一个头文件中声明了具有不同模板变量长度的同一个类。我想要实现的是包含一个文件并定义具有不同模板变量长度的类,就像 boost::function 一样。

我查找了 boost::function 的代码,但我不知道它是如何工作的。有任何想法吗?

0 投票
2 回答
6955 浏览

c++ - Boost函数和boost绑定:绑定返回值?

这与上一个问题有关:Using boost::bind with boost::function: retrieve binded variable type

我可以绑定这样的函数:

在.h中:

在.cpp

但是我怎样才能绑定一个返回值呢?IE:

在.h中:

在.cpp

0 投票
2 回答
1306 浏览

c++ - 使用异步函数提升 asio 编译错误

我想创建一个异步。服务器。我成功地做到了,但现在我想将 async_read/asyn_write 函数绑定到调用者对象函数。所以我试着用 boost::function 来做到这一点,你有我的代码:

服务器.cpp

Client.h 和 .cpp

和 Network.cpp 和 .h

当我想编译它时,我有以下错误:

经过这么多小时的“谷歌搜索”和反思,我没有找到为什么我有这些错误。任何人都可以帮助我吗?

0 投票
2 回答
3179 浏览

c++ - VS2010 中的 boost::function : 错误 C2039: 'function' : is not a member of 'boost'

信息

我想使用 boost::function 将回调作为参数传递,就像这样:

然后使用它:

毕竟在我打电话的一连串回调之后

问题

我刚刚在Debug中编译了解决方案,一切看起来都很好......

但是在Release中我遇到了很多上面提到的错误

我感到困惑和失望。

建议

我发现boost::function. 例如boost::function0boost::function1。这是因为 VS2010 不支持某些东西(我不知道到底是什么)

我对吗?

我还需要使这个应用程序尽可能可移植和跨平台。

提升 1.47 和 VS2010

0 投票
1 回答
857 浏览

c++ - 使用 mpl::if_、boost::function 和 typedef 来 void 的问题

我是 Boost.MPL 库的新手,有一些“初学者问题”

看看这个样本:

编译时我得到:

这里有什么问题,我该如何解决?

mpl::if_据我了解,编译器仅应评估的选定部分....

0 投票
1 回答
138 浏览

c++ - Boost Overload 奇怪的行为.. `int (int), int (std::string)` 与 `int (int), int (std::string), std::string (std::string)` 有何不同?

所以有一个很棒的库叫做OverLoad(链接到可下载的 svn 目录,lib 只是标题)。它可以接受任何类型的函数,并自动决定您调用的是哪一个。它类似于增强功能,但更好。这里有 2 个代码示例(浏览器可以查看 boost svn 一二 。这是我的代码,它没有编译并且基于它们:

所以我想知道如何解决这个问题?

0 投票
2 回答
1005 浏览

c++ - Bind function pointer to boost::function object

How can I initialize a boost::function object with a raw function pointer?

Metacode

...

If you need additional information's just let me know.