问题标签 [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 投票
1 回答
1789 浏览

c++ - C++ 虚函数调用与 boost::function 快速调用

我想知道与一个相同的 boost::function 调用相比,单继承虚函数调用有多快。它们的性能几乎相同还是 boost::function 更慢?

我知道性能可能因情况而异,但是,作为一般规则,哪个更快,在多大程度上是这样?

谢谢,吉尔赫姆

- 编辑

KennyTM 的测试足以让我信服。对于我自己的目的, boost::function 似乎并不比 vcall 慢得多。谢谢。

0 投票
2 回答
4863 浏览

c++ - 未解析的外部符号“public:void __thiscall ...”

我正在使用boost::function将函数传递给Button构造函数,以便它保存该函数。每当它被激活时调用它。

在我的 TitleState 中,我构建了一个像这样的 Button。

其中 ButtonAction 是static voidTitleState 标头中私有的函数,在实现文件中定义为通过 std::cout 简单地输出到控制台(仅作为测试它是否工作)。

在我的代码中,如果鼠标单击 TitleStateHandleEvents函数中的按钮,程序会调用该按钮的Activate函数,如下所示。

问题是,当程序尝试链接时,我收到此错误....

unresolved external symbol "public: void __thiscall Button::Activate(void)" (?Activate@Button@@QAEXXZ) referenced in function "public: virtual void __thiscall TitleState::HandleEvents(void)" (?HandleEvents@TitleState@@UAEXXZ)

除了链接器找不到函数的定义之外,我不确定问题是什么。一切都是#included正确的或声明的。任何帮助表示赞赏。谢谢。

PS 当我使用 BoostPro 安装程序时,我只安装了单线程的东西,没有安装多线程的东西。这可能是它不起作用的原因吗?我读到当库以不同的方式链接时,可能会出现链接器问题。如果这可能是一个问题,我会补充说我也在使用 SFML 库。

0 投票
3 回答
123167 浏览

c++ - 如何将 boost 绑定与成员函数一起使用

以下代码导致 cl.exe 崩溃 (MS VS2005)。
我正在尝试使用 boost bind 来创建一个调用 myclass 方法的函数:

我究竟做错了什么?

0 投票
2 回答
3933 浏览

c++ - 如何为 boost::bind 强制模板函数重载?

我正在尝试std::find_if通过boost::bindboost::contains(来自 boost/algoritm/string 库)一起使用来创建谓词。以下代码段显示了我尝试实现此目的的两种方式。

使用 g++ 3.4.5 编译此代码时,我得到以下输出。

当我切换到boost::icontains只有一个过载的情况下,一切正常。当有多个非模板函数重载时,我知道如何解决类似的情况。有人可以帮我正确地写这个吗?还是我应该编写自己的比较函数?

0 投票
2 回答
13915 浏览

function - boost::function 参数的默认值?

我有一个函数,我想将可选的 boost::function 参数作为回调来报告错误情况。是否有一些特殊值我可以使用默认值使其成为可选?

例如,使用常规函数指针,我可以这样做:

我可以用 boost::function 替换函数指针做类似的事情吗?

0 投票
2 回答
2745 浏览

c++ - How to use boost::bind with non-copyable params, for example boost::promise?

Some C++ objects have no copy constructor, but have move constructor. For example, boost::promise. How can I bind those objects using their move constructors ?

0 投票
1 回答
797 浏览

c++ - Boost 模板参数中发现 C++ 奇怪的语法

我正在查看 Boost 中的“Function”类文档,并偶然发现了这一点:

我必须承认这种语法对我来说非常混乱。这怎么可能是合法的 C++ ?

引擎盖下有什么技巧吗?这种语法是否记录在任何地方?

0 投票
2 回答
374 浏览

function-pointers - boost::function 和普通函数指针:模棱两可的重载

给定以下成员函数重载以采用各种仿函数

和功能

那为什么要取baz的普通函数指针

产生这个错误:

如何解决这种歧义?

0 投票
1 回答
697 浏览

c++ - std::tr1::function::target和协/逆变

由于我喜欢使用 C# 和 C++ 进行编程,因此我将实现一个类似 C# 的事件系统,作为我计划中的 C++ SFML-GUI 的坚实基础。

这只是我的代码的摘录,我希望这能澄清我的概念:

如您所见,我使用 boost::signal 作为我的实际事件系统,但我使用 IEvent 接口(实际上是一个抽象类)将其封装,以防止事件侦听器通过 operator() 触发事件。

为方便起见,我重载了加赋值和减赋值运算符。如果我现在从 IEventListener 派生我的事件监听类,我可以编写代码而无需担心信号中的悬空函数指针。

到目前为止,我正在测试我的结果,但我遇到了以下问题std::tr1::function::target<TFuncPtr>()

The EventHandler<TEventArgs>::target<TFuncPtr>() method will only return a valid pointer if TFuncPtr is the exact same type as stored in the Functor, regardless of covariance. Because of the RTTI check, it prohibits to access the pointer as a standard weakly-typed C function pointer, which is kind of annoying in cases like this one.

The EventHandler is of type DerivedEventArgs but nevertheless points to a pfnBaseEventHandler function even though the function ran through the constructor.

That means, that std::tr1::function itself "supports" contravariance, but I can't find a way of simply getting the function pointer out of the std::tr1::funcion object if I don't know its type at compile time which is required for a template argument.

I would appreciate in cases like this that they added a simple get() method like they did for RAII pointer types.

Since I'm quite new to programming, I would like to know if there is a way to solve this problem, preferrably at compile-time via templates (which I think would be the only way).

0 投票
1 回答
1203 浏览

c++ - C++ Boost 函数比较

我有一个包含 boost::function 作为其参数之一的类。我必须使此类相等性具有可比性,但 boost::function 不能具有可比性。这个问题有简单的解决方法吗?

谢谢,戈库尔。