我有一个模板模板函数CreateClassA,它可以与ClassA一起使用。我想像这样声明CreateClassA:
template<typename T, template<typename, typename> class Container, typename alloc = std::allocator<T>>
std::shared_ptr<ClassA<T, Container, alloc>> CreateClassA(size_t size, double dist) {
return std::make_shared<ClassA<T, Container, alloc>>(size, dist);
};
然后像这样称呼它:
size_t size = 5;
std::shared_ptr<ClassA<ObjectB, std::vector>> classA2 = CreateClassA(size, 4.5);
出于某种原因,编译器无法推断出模板参数类型,除非我像这样声明CreateClassA:
template<typename T, template<typename, typename> class Container, typename alloc = std::allocator<T>>
std::shared_ptr<ClassA<T, Container, alloc>> CreateClassA(ClassA<T,Container, alloc> classA, size_t size, double dist) {
return std::make_shared<ClassA<T, Container, alloc>>(size, dist);
};
并调用这样的函数:
size_t size = 5;
ClassA<ObjectB,std::vector> classA(size,5);
std::shared_ptr<ClassA<ObjectB, std::vector>> classA2 = CreateClassA(classA, size, 4.5);
我不明白为什么函数不能推断出第一个函数实现中的模板参数以及为什么需要classA参数。