gpt4 book ai didi

c++ - 函数指针

转载 作者:太空狗 更新时间:2023-10-29 23:47:51 24 4
gpt4 key购买 nike

我必须将函数传递给指针。为此,我使用了 boost::function。捕获指针的函数针对不同的签名进行了重载。例如:

void Foo(boost::function<int ()>) { ... }
void Foo(boost::function<float ()>) { ... }
void Foo(boost::function<double ()>) { ... }

现在我想在那里传递一些类方法指针:

class test
{
public:
float toCall() { };
};

class Wrapper
{
Wrapper() {
test obj;
Foo(boost::bind(&test::toCall, this));
}
};


error: no matching function for call to ‘Foo(boost::_bi::bind_t<float, boost::_mfi::mf0<float, test>, boost::_bi::list1<boost::_bi::value<Wrapper*> > >)’
note: candidates are: Foo(boost::function<float()>&)

最佳答案

Nonono 这行不通。因为boost::function<...>有一个模板化的构造函数来接受任何和所有类型。稍后检查与调用签名的兼容性。过载解决方案无法解决此问题。

另外,我想你想通过 &obj而不是 this .尝试显式转换:

Foo(boost::function<float ()>(boost::bind(&test::toCall, &obj)));

虽然这非常丑陋,所以您可能想引入一个 typedef

void Foo(FloatHandler) { ... }
...
FloatHandler f(boost::bind(&test::toCall, &obj));
Foo(f);

或者最终你可以制作Foo一个只接受任何可调用类型的模板 T .我怀疑这可能是最简单的,因为在一般情况下我怀疑你不知道什么 boost::function<...>你需要投到。那些想要返回 std::complex<> 的人呢? .所以……

template<typename T>
void Foo(T) { ... }
...
Foo(boost::bind(&test::toCall, &obj));

希望这对您有所帮助。

关于c++ - 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604901/

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