我正在尝试调用此类构造函数:
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{})>);
我收到此错误: 模板类型参数的模板参数必须是类型
有人可以解释一下原因吗?谢谢!
答案 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{});
// ^