【发布时间】:2016-07-29 06:29:16
【问题描述】:
我正在尝试创建一个通用包装函数,该函数将函数作为模板参数,并将与该函数相同的参数作为其参数。例如:
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。换句话说,解决方案需要是一个函数而不是函数对象。最重要的是,我需要能够在包装函数中工作。
如果内联 cmets 不清楚,我希望能够执行以下操作:
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
针对前 2 个回复,我编辑了问题以明确我需要能够在包装函数中工作(即在调用包装函数之前和之后修改一些全局状态)
【问题讨论】:
标签: c++ templates variadic-templates variadic-functions