C++ 将模板类型名 class 作为函数参数传递

C++ Passing a tempate typename class as function parameter

我需要将模板 class 作为参数传递给函数,但我可以在函数内部检索类型名称以初始化时间变量

class声明如下:

template <typename Type> class ListIndex_Linked

这里是main中class的初始化和函数的调用

ListIndex_Linked<std::string> L;
insertion(L);

以及我正在尝试做的事情

template <class list <typename Type>>
void insertion( list<Type>& L ) 
{
    Type& temp = L.get(0); 
    {
        int max = L.numElem();
        for ( int i = 1, ; i < max; i++ )
        {

        }
    }
}

但我得到这个错误:

error: 'list' is not a template
void insertion( list<Type>& L )
             ^

在此先感谢您的帮助

如果 insertion 只能与 ListIndex_Linked 一起使用,那么如果列表的模板参数为:

,则可以将其写为模板
template <typename Type>
void insertion(ListIndex_Linked<Type>& L) 
{
  ...
}

否则,可以使用模板模板参数:

template<template<class> class List, class Type>
void insertion(const List<Type>& L)
{
  ...
}

您没有正确地将 list 声明为 template template parameter

template <template <typename> class list, typename Type>
void insertion( list<Type>& L ) 
{
  ...
}

参考:http://en.cppreference.com/w/cpp/language/template_parameters

另一种方法是使用 auto 不强制要求 Type:

template <typename Container>
void insertion(Container& L ) 
{
    auto& temp = L.get(0); 
    {
        int max = L.numElem();
        for ( int i = 1, ; i < max; i++ )
        {

        }
    }
}

Container 里面还有 typedef 可能会有帮助,比如

typename Container::reference temp = L.get(0); // or Container::value_type&

这需要像这样的东西:

template <typename Type>
class ListIndex_Linked
{
public:
    using value_type = Type;
    using reference = Type&;
    // ...
    // Your code
};