我正在尝试创建一个通用的 Package 器函数,它将一个函数作为模板参数,并将与该函数相同的参数作为它的参数。
template <typename F, F func>
/* return type of F */ wrapper(Ts... Args /* not sure how to get Ts*/)
{
// do stuff
auto ret = F(std::forward<Ts>(args)...);
// do some other stuff
return ret;
}
解决方案需要转换为与func
相同类型的函数指针,以便我可以将其传递给C API。换句话说,解决方案需要是函数而不是函数对象。最重要的是,我需要能够在 Package 器函数中工作。
如果内联注解不清楚,我希望能够执行以下操作:
struct c_api_interface {
int (*func_a)(int, int);
int (*func_b)(char, char, char);
};
int foo(int a, int b)
{
return a + b;
}
int bar(char a, char b, char c)
{
return a + b * c;
}
c_api_interface my_interface;
my_interface.func_a = wrapper<foo>;
my_interface.func_b = wrapper<bar>;
我找了相关的帖子,找到了这些,但是没有一个是我想做的。这些帖子大部分都是关于函数对象的。我想做的事情可能吗?
Function passed as template argument
Function wrapper via (function object) class (variadic) template
How does wrapping a function pointer and function object work in generic code?
How do I get the argument types of a function pointer in a variadic template class?
Generic functor for functions with any argument list
C++ Functors - and their uses
作为对前两个回答的回应,我编辑了这个问题,以明确我需要能够在 Package 器函数中进行工作(即在调用 Package 函数之前和之后修改一些全局状态)
7条答案
按热度按时间rseugnpd1#
用作
wrapper<decltype(&foo), foo>
。txu3uszq2#
参见http://rextester.com/ZZD18334
dba5bblo3#
你可以尝试类似的东西(丑陋,但工作)
slhcrj9b4#
你可能需要
可以像
void (*funcPtr)(int) = Wrapper<void(int)>(&someFunction);
这样使用amrnrhlw5#
我想这是你想做的事情的简洁方法:
像这样使用它:
hc2pp10m6#
你可以试试这个
使用如下示例:
lmvvr0a87#
这是一个用于c++17和更新的使用自动模板参数:
例如: