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
};
我需要将模板 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
};