没有关于升压信号的名为"应用"的类模板2
No class template named 'apply' with regard to Boost Signals2
我已经按照 Boost 教程"传递插槽(中级)",在参考 [ 1 ] 到这封信,但我的代码遇到了一个奇怪的错误,我无法破译或找到任何帮助。我的代码如下:
[ 1 ] - http://www.boost.org/doc/libs/1_55_0/doc/html/signals2/tutorial.html#idp204830936
namespace GekkoFyre {
class TuiHangouts {
private:
typedef boost::signals2::signal<void()> onRosterUpdate;
typedef onRosterUpdate::slot_type onRosterUpdateSlotType;
void logMsgs(std::string message, const xmppMsgType &msgType);
void logMsgsDrawHistory();
// Slots
boost::signals2::connection doOnRosterUpdate(const onRosterUpdateSlotType &slot);
onRosterUpdate rosterUpdate;
};
}
boost::signals2::connection GekkoFyre::TuiHangouts::doOnRosterUpdate(
const GekkoFyre::TuiHangouts::onRosterUpdateSlotType &slot)
{
return rosterUpdate.connect(slot);
}
问题出在这一点上:
void GekkoFyre::TuiHangouts::logMsgs(std::string message, const xmppMsgType &msgType)
{
doOnRosterUpdate(&GekkoFyre::TuiHangouts::logMsgsDrawHistory);
}
我收到错误:
In file included from /usr/include/boost/function/detail/maybe_include.hpp:13:0,
from /usr/include/boost/function/detail/function_iterate.hpp:14,
from /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:47,
from /usr/include/boost/function.hpp:64,
from /usr/include/boost/signals2/signal.hpp:18,
from /usr/include/boost/signals2.hpp:19,
from /home/phobos/Programming/gecho/src/tui/chat.hpp:47,
from /home/phobos/Programming/gecho/src/tui/chat.cpp:35:
/usr/include/boost/function/function_template.hpp: In instantiation of 'void boost::function0<R>::assign_to(Functor) [with Functor = void (GekkoFyre::TuiHangouts::*)(); R = void]':
/usr/include/boost/function/function_template.hpp:722:7: required from 'boost::function0<R>::function0(Functor, typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), int>::type) [with Functor = void (GekkoFyre::TuiHangouts::*)(); R = void; typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), int>::type = int]'
/usr/include/boost/function/function_template.hpp:1071:16: required from 'boost::function<R()>::function(Functor, typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), int>::type) [with Functor = void (GekkoFyre::TuiHangouts::*)(); R = void; typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), int>::type = int]'
/usr/include/boost/function/function_template.hpp:1126:5: required from 'typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), boost::function<R()>&>::type boost::function<R()>::operator=(Functor) [with Functor = void (GekkoFyre::TuiHangouts::*)(); R = void; typename boost::enable_if_c<(boost::type_traits::ice_not<(boost::is_integral<Functor>::value)>::value), boost::function<R()>&>::type = boost::function<void()>&]'
/usr/include/boost/signals2/detail/slot_template.hpp:160:24: required from 'void boost::signals2::slot<R(Args ...), SlotFunction>::init_slot_function(const F&) [with F = void (GekkoFyre::TuiHangouts::*)(); SlotFunction = boost::function<void()>; R = void; Args = {}]'
/usr/include/boost/signals2/detail/slot_template.hpp:85:27: required from 'boost::signals2::slot<R(Args ...), SlotFunction>::slot(const F&) [with F = void (GekkoFyre::TuiHangouts::*)(); SlotFunction = boost::function<void()>; R = void; Args = {}]'
/home/phobos/Programming/gecho/src/tui/chat.cpp:802:74: required from here
/usr/include/boost/function/function_template.hpp:924:9: error: no class template named 'apply' in 'struct boost::detail::function::get_invoker0<boost::detail::function::member_ptr_tag>'
handler_type;
如果有人能协助解决这个问题,那么将不胜感激。正如我之前所说,我做了一些研究,但实际上找不到太多东西。也许这对我来说似乎有点独特,而且我确实遵循了这封信的教程。我知道这并不总是正确的做法,但从我通过研究收集到的信息来看,这段代码应该有效。
&GekkoFyre::TuiHangouts::logMsgsDrawHistory
是一个成员函数指针,其类型为 void (GekkoFyre::TuiHangouts::*)()
。这与任何其他函数不同,因此不能像任何其他函数一样调用它。Signals2 将尝试使用语法func()
调用它,但这里没有this
指针。若要为其提供this
指针,应使用语法(p->*func)()
。此处的p
成为this
指针。 boost::bind
(自 2011 年以来也在C++标准中称为 std::bind
)将其包装为一个函数对象,可以通过调用 (p->*func)()
来调用func()
。
相关文章:
- c++r值引用应用于函数指针
- 如何将记忆应用于此递归函数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 应用于运算符而不是构造函数的显式关键字
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 应用于无符号类型的一元减号运算符
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 我可以将c ++清理器仅应用于程序的一部分而不是第三方库吗?
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 如何在OpenGL中将纹理应用于子网格
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 将平移应用于特征顶点
- 模板包扩展以将函数应用于连续的参数对
- c ++如何将模板应用于模板类的孩子/朋友?
- 将函数应用于特征矩阵中的所有元素,而无需循环
- 这些重载运算符如何应用于表达式 d***b?
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 应用于整型类型的编译时优化 'std::isfinite()'
- 应用于类型别名声明的 [[maybe_unused]] 属性的语法