gpt4 book ai didi

用作其他函数参数的 C++ 绑定(bind)函数

转载 作者:可可西里 更新时间:2023-11-01 18:20:48 25 4
gpt4 key购买 nike

我有一个需要函数指针作为参数的函数:

int func(int a, int (*b)(int, int))
{
return b(a,1);
}

现在我想在这个函数中使用一个具有三个参数的特定函数:

int c(int, int, int)
{
// ...
}

如何绑定(bind) c 的第一个参数,以便我能够:

int i = func(10, c_bound);

我一直在查看 std::bind1st 但我似乎无法弄明白。它不返回函数指针吗?我有充分的自由来调整 func 所以任何方法的改变都是可能的。虽然我希望我的代码的用户能够定义他们自己的 c...

请注意,上面是我正在使用的实际功能的极度简化。

遗憾的是,该项目需要 C++98

最佳答案

你不能那样做。您必须先修改 func 以获取函数对象。像这样的东西:

int func( int a, std::function< int(int, int) > b )
{
return b( a, rand() );
}

事实上,b 不需要是一个std::function,它可以被模板化:

template< typename T >
int func( int a, T b )
{
return b( a, rand() );
}

但我会坚持使用 std::function 版本,以确保清晰度和稍微不那么复杂的错误编译器输出。

然后你就可以做类似的事情了:

int i = func( 10, std::bind( &c, _1, _2, some-value ) );

请注意,所有这些都是 C++11,但您可以使用 Boost 在 C++03 中完成。

关于用作其他函数参数的 C++ 绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692121/

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