【发布时间】:2013-02-18 17:21:58
【问题描述】:
我想创建一个接受可变数量模板参数的函数。稍后使用这些参数,函数应该像这样传递它们的位置:
template<typename R, typename Args...>
R myFunction(Data &data, void *function) {
auto f = (R (*)(Args...))function;
return f(read<Args1>(data, 1), read<Args2>(data, 2), ...);// <-- This is the problem
}
给定的代码当然是不可编译的。有什么办法可以解决吗?有没有办法不用可变参数模板而没有太多的代码重复?
【问题讨论】:
-
我相信你可以避免将对象指针转换为函数指针。
-
@sellibitze:有问题吗?因为我只能拥有从 C 函数传递的 void* 指针用户数据。
-
数据可以是
void *。值得关注的是void *的功能。 -
@JurajBlaho:这种演员阵容非常不便携。我建议你解释一下你打算这样解决什么问题。如果您这样做,您可能会收到更多有用的答案。在我看来,我们有一点 X/Y 问题。
-
@sellibitze:感谢您的评论,现在我看到指向
void*的转换函数指针是UB。我将不得不以不同的方式解决它,但我仍然能够使用已接受答案中的想法来解决问题。
标签: c++ c++11 variadic-templates