获取Variadic Variadic模板的地址?

时间:2014-04-26 06:39:29

标签: c++ templates variadic-templates

template<typename R, typename... Args1, typename... Args2>
void Func(R (*)(Args1...), Args2...)
{ // ...
}

template<typename R, typename... Args>
void Init(R(*)(Args...))
{
    // the second list is all of same types (a generic "any" type), just need same number as Args
    auto ptr = &Func<R, Args..., (Misc<Args>::type)...>;

    // ...
}


Init(&somefunc); // usage

代码本身就说明了,我不确定如何将两者分开,以便它们不会被连接到一个可变参数。我尝试使用另一个包含单个类型列表的类,然后Func只需要3个参数,但我不断收到明确的模板错误。

1 个答案:

答案 0 :(得分:0)

此类功能声明

template<typename R, typename... Args1, typename... Args2>
void Func(R (*)(Args1...), Args2...)
{ // ...
}

只能通过从参数中推导出模板参数来实例化。 但你真的需要Args1吗?怎么样:

template<typename R, typename... Args2>
void Func(R, Args2...)
{ // ...
}

template<typename R>
R Init(R)
{
  // instantiate Func<>(R, int, float, int)
  auto ptr = &Func<R, int, float, int>;

  // ...
  return ptr;
}


void foo(int, float) {
//
}


int main() {
  Init(foo);
}