我有以下代码应该允许使用包含任意类型的共享指针的元组:
#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支持。