我要在模板类之外定义函数,如下所述。
已经为第二个参数(它是模板,也采用默认参数)尝试了很多组合。
template <typename T>
class CustomAllocator
{
//My custom allocator
};
template <typename T, typename Allocator = CustomAllocator<T> >
class CustomContainer
{
void push_back();
};
/*I want to define push_back outside my class, tried everything.
Almost 4 hours spent through stackoverflow, fluentcpp and all sites*/
// What should be specified for Allocator here ?
template <typename T>
void CustomContainer<T,Allocator>::push_back(T value)
{
}
//OR
template <typename T>
void CustomContainer<T,CustomAllocator<> >::push_back(T value)
{
}
我希望它可以在课外定义 实际出现编译器错误,如果是简单类型,我可以在第二个参数中轻松提及int,float等。
答案 0 :(得分:4)
在类定义之外,函数尚不清楚Allocator
是什么类型,因此必须像重新声明T
template <class T, class Allocator>
void CustomContainer<T,Allocator>::push_back(T value)
{
// ...
}
(我假设DataType
应该是T
)
请注意,您在类中的push_back
声明应符合以下定义:
template <typename T, typename Allocator = CustomAllocator<T> >
class CustomContainer
{
void push_back(T);
};
答案 1 :(得分:2)
对于模板定义之外定义的模板的成员函数,不得使用默认模板参数。
根据C ++ 17 Standard(17.1模板参数)
- ...不得在模板中指定默认模板参数- 类成员定义的参数列表 出现在会员课程之外的模板。
所以只要写
template <typename T, typename Allocator>
void CustomContainer<T, Allocator>::push_back( const T &value )
{
//...
}
请注意函数的参数。您对函数的声明与它的定义不符。