可变参数模板扩展期间的C++索引类型

kee*_*bus 18 c++ templates variadic-templates c++11

我有一个简单而又令人生畏的问题,我自己无法解决.我有类似的东西

template<class T, class... Args>
T* create(SomeCastableType* args, size_t numArgs)
{
  return new T(static_cast<Args>(args[INDEX_OF_EXPANSION])...);
}
Run Code Online (Sandbox Code Playgroud)

假设SomeCastableType可以转换为任何类型.显然我不能得到的是INDEX_OF_EXPANSION.

非常感谢您的帮助.

Xeo*_*Xeo 21

指数诡计,yay~

template<class T, class... Args, std::size_t... Is>
T* create(U* p, indices<Is...>){
  return new T(static_cast<Args>(p[Is])...);
}

template<class T, class... Args>
T* create(U* p, std::size_t num_args){
  assert(num_args == sizeof...(Args));
  return create<T, Args...>(p, build_indices<sizeof...(Args)>{});
}
Run Code Online (Sandbox Code Playgroud)

当然,我强烈建议使用智能指针std::vector不是原始指针.

  • @user:是的,CTP可变参数是非常*错误的.索引技巧是我第一次尝试时尝试的一件事,当晚我总共提交了11个可变错误(其中10个是在内部Microsoft版本中修复的). (2认同)
  • 您可以包含使用 C++14 标准化 `std::index_sequence&lt;...&gt;` 的版本吗?或者,也许只使用它,并链接到[此处](http://stackoverflow.com/a/32223343/1593077)以获取 C++11 实现? (2认同)