gpt4 book ai didi

c++ - 指向仿函数的函数指针

转载 作者:太空狗 更新时间:2023-10-29 21:44:33 24 4
gpt4 key购买 nike

我有一个静态函数 foo 但我想调用的 API 只接受指向仿函数(具有类似接口(interface))的指针。有没有办法将 foo 传递给 API?或者我需要根据仿函数重新实现 foo

示例代码:

template<typename ReturnType, typename ArgT>
struct Functor: public std::unary_function<ArgT,ReturnType>
{
virtual ~Functor () {}
virtual ReturnType operator()( ArgT) = 0;
};


// I have a pre written function
static int foo (int a) {
return ++a;
}

// I am not allowed to change the signature of this function :(
static void API ( Functor<int,int> * functor ) {
cout << (*functor) (5);
}

int main (void) {
API ( ??? make use of `foo` somehow ??? );
return 0;
}

我的问题是关于调用 API,实现 Functor 是唯一的解决方案,或者有一种方法可以使用 foo 将其传递给 API?

boost::bind 有帮助吗?
我的意思是 boost::bind(foo, _1) 将从 foo 中生成函数对象,然后是否有办法从函数对象中形成所需的仿函数?

最佳答案

除了将自己的仿函数编写为 Functor<int, int> 的派生类型之外,您似乎别无选择。 .但是,您可以通过提供一个可以从仿函数或函数指针实例化的中间类模板仿函数来为自己省去一些麻烦:

template<typename R, typename A>
struct GenericFunctor<R, A> : public Functor<R, A>
{
template <typename F>
MyFunctor(F f) : f_(f) {}
ReturnType operator()(A arg) = { return f_(arg);}
private:
std::function<R(A)> f_; // or boost::function
};

然后你可以说

GenericFunctor<int, int> fun = foo;
API(&fun); // works. GenericFinctor<int,int> is a Functor<int,int>

这只是一个解决方法,因为您得到的东西太糟糕了。

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

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