gpt4 book ai didi

c++ - 在嵌套的 boost 绑定(bind)中使用模板函数

转载 作者:行者123 更新时间:2023-11-30 04:31:41 24 4
gpt4 key购买 nike

如何模板化这些函数?

boost::function< void(int) > binder( void(*func)(int, char), int a1, char a2 )
{
return boost::bind( func, a1, a2 );
}

void proxy( boost::function< void(int) > func, int a1 )
{
boost::bind( func, a1 )();
}

我尝试了以下但没有成功:

template< typename R, typename A1, typename A2 >
static boost::function< void(int) > binder( R(*func)(A1,A2), A1 a1, A2 a2 )
{
return boost::bind( func, a1, a2 );
}

template< typename A1 >
static void proxy( boost::function< void(A1) > func, A1 a1 )
{
boost::bind( func, a1 )();
}

如果我可以不用 binder() 就好了。这就是我打算如何使用它们:

void print( int i, char c );
boost::signals2::signal.connect(
boost::bind(
&proxy,
boost::bind(
&binder,
&print,
_1,
'a'
),
_1
)
);

我检查了以下但没有运气:

how-to-use-manipulate-return-value-from-nested-boostbind

perform-argument-substitution-on-nested-boostbind-without-composition

can-i-use-boost-bind-with-a-function-template

最佳答案

你需要正确拼写函数指针:

R(*func)(A1, A2)

您还需要指定用于形成函数指针的模板参数:请记住 binder 不是函数,而是模板 !

&binder<void, int, char>
&proxy<int>

最后,您没有正确设置信号变量。像这样声明:

boost::signals2::signal<void(int)> sig;

然后使用:

sig.connect( /* all that stuff */ );

关于c++ - 在嵌套的 boost 绑定(bind)中使用模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8101705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com