C ++模板,方法原型和实现

时间:2014-04-14 21:22:10

标签: c++ templates

我在标题.h ++文件中有以下内容:

template<typename N, 
         typename V = int, 
         typename C = std::less<N>, 
         typename A = std::allocator<N>>
class my_class {
  public:
    ...
  private:
    N* buy_node_( const V& );
    ...
};

在实现.c ++文件中我有

template <typename N, typename V, typename C, typename A>
typename my_class<N, V, C, A>::N* 
my_class<N, V, C, A>::buy_node_( const V& v )
{
  ...
}

但这给了我错误:

error: prototype for ... does not match any in class ...

但是,如果我这样做,请在标题中:

template<typename N, 
         typename V = int, 
         typename C = std::less<N>, 
         typename A = std::allocator<N>>
class my_class {
  public:
    ...
  private:
    typedef N node_t;
    N* buy_node_( const V& );
    ...
};

这在实施中:

template <typename N, typename V, typename C, typename A>
typename my_class<N, V, C, A>::node_t* 
my_class<N, V, C, A>::buy_node_( const V& v )
{
  ...
}

它编译得很好。我很好奇为什么我需要typedef?

1 个答案:

答案 0 :(得分:0)

该行:

typename my_class<N, V, C, A>::N*

正在尝试引用my_class中的typedef,但my_class没有定义这样的typedef。在这种情况下,typename关键字用于表示&#34;这是一个typedef&#34; (例如typedef T::value)。

第二个版本适用于node_t是一个typedef,node_tN是等效的。

由于N是模板的一部分,您可以简单地说:

N*