如何使用任意长度的元组专门化可变参数模板?

时间:2018-04-24 07:53:54

标签: c++ c++11 variadic-templates

我有以下代码应该允许使用包含任意类型的共享指针的元组:

#include <memory>
#include <tuple>

template<typename... Types>
using SharedPtrTuple = std::tuple<std::shared_ptr<Types>...>;

template<typename... Components>
class Processor;

template<typename... Components>
class Processor<SharedPtrTuple<Components...>>
{
  // usage of unpacking of shared pointers etc.
};

当我使用包含单个类型的元组实例化Processor模板时,它可以工作:

class MyComponent {};

int main()
{
  Processor<SharedPtrTuple<MyComponent>> processor;
  return 0;
}

但是,当我尝试使用包含两个或更多类型的元组实例化它时,它不会编译:

class MyComponentA {};
class MyComponentB {};

int main()
{
  Processor<SharedPtrTuple<MyComponentA, MyComponentB>> processor;
  return 0;
}

输出:

Error   C2079   'processor' uses undefined class 'Processor<std::tuple<std::shared_ptr<MyComponentA>,std::shared_ptr<MyComponentB>>>'

如何让编译器查找并使用我的专用于多种类型的共享指针元组?我正在使用Visual Studio 2015(VC12),它应该具有完整的C ++ 11支持。

0 个答案:

没有答案