模板类型参数的模板参数必须是一个类型?

时间:2015-05-21 21:35:59

标签: c++ templates constructor

我正在尝试调用此类构造函数:

template<typename T>
ListNode<T>::ListNode(SkipListKind kind, const T& key){
     key = SkipListKey<T>(kind, key); // A private member of the class
}

我称之为:

std::shared_ptr<ListNode<T>(SkipListKind::NegInf, T{})>);

我收到此错误: 模板类型参数的模板参数必须是类型

有人可以解释一下原因吗?谢谢!

2 个答案:

答案 0 :(得分:4)

外部尖括号内部的内容是模板参数。 std::shared_ptr将类型作为其模板参数。外部尖括号内的内容不是一种类型;它是一个类型,后跟构造函数参数。

你可能想要:

std::make_shared<ListNode<T>>(SkipListKind::NegInf, T{})

std::make_shared函数模板将类型作为其模板参数,然后将其参数转发给类型的构造函数,最后将std::shared_ptr返回给新构造的对象。

答案 1 :(得分:3)

这是错误的:

std::shared_ptr<ListNode<T>(SkipListKind::NegInf, T{})>);
                                                 //   ^

您可能打算这样做:

std::make_shared<ListNode<T>>(SkipListKind::NegInf, T{});
                         // ^