C ++ 11模板和别名声明

时间:2015-07-06 12:45:13

标签: templates c++11 alias

我疯了。 我正在尝试创建一个分配器,我在头文件中写了这个定义。

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 个答案:

答案 0 :(得分:2)

选项#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;
}