C++11 模板和别名声明
C++11 Template and alias declaration
我快疯了。
我正在尝试创建一个分配器,我在头文件中写了这个定义。
template<typename T>
class Allocator
{
using size_type = size_t;
using difference_type = ptrdiff_t;
using pointer = T*;
using const_pointer = const T*;
using reference = T&;
using const_reference = const T&;
using value_type = T;
//others stuff
// Get address of a reference
pointer address(reference x) const;
...
};
之后,我尝试在 .cpp 文件中编写定义,如:
template<typename T>
pointer Allocator<T>::address(reference x) const
{
return &x;
}
但是错了。
我也试着写:
template<typename T>
Allocator<T>::pointer Allocator<T>::address(reference x) const
{
return &x;
}
但同样是错误的。
使用模板别名的方法的正确定义是什么?
感谢您的帮助。
选项#1
template <typename T>
typename Allocator<T>::pointer Allocator<T>::address(reference x) const
//~~~~~^
{
return &x;
}
选项#2
template <typename T>
auto Allocator<T>::address(reference x) const -> pointer
//~^ ~~~~~~~~~^
{
return &x;
}
我快疯了。 我正在尝试创建一个分配器,我在头文件中写了这个定义。
template<typename T>
class Allocator
{
using size_type = size_t;
using difference_type = ptrdiff_t;
using pointer = T*;
using const_pointer = const T*;
using reference = T&;
using const_reference = const T&;
using value_type = T;
//others stuff
// Get address of a reference
pointer address(reference x) const;
...
};
之后,我尝试在 .cpp 文件中编写定义,如:
template<typename T>
pointer Allocator<T>::address(reference x) const
{
return &x;
}
但是错了。 我也试着写:
template<typename T>
Allocator<T>::pointer Allocator<T>::address(reference x) const
{
return &x;
}
但同样是错误的。
使用模板别名的方法的正确定义是什么?
感谢您的帮助。
选项#1
template <typename T>
typename Allocator<T>::pointer Allocator<T>::address(reference x) const
//~~~~~^
{
return &x;
}
选项#2
template <typename T>
auto Allocator<T>::address(reference x) const -> pointer
//~^ ~~~~~~~~~^
{
return &x;
}