C++模板、方法原型和实现
C++ templates, method prototypes and implementation
我在header.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?
行:
typename my_class<N, V, C, A>::N*
正在尝试引用my_class
中的typedef,但my_class
未定义此类typedef。在这种情况下,typename
关键字用于表示"这是typedef"(例如typedef T::value
)。
第二个版本的工作原理是node_t
是typedef,node_t
和N
是等价的。
由于N
是模板的一部分,您可以简单地说:
N*
相关文章:
- 如果没有malloc,链表实现将失败
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 标准库头文件函数原型的实现是如何用 c++ 编写的?
- 原型 C++ 实现 - "marked ‘override’, but does not override"错误
- 可以视觉C 检查不匹配的原型和实现
- 强制子类在C++中实现某个构造函数原型
- 函数原型和C++中的函数实现之间的区别是什么
- 函数原型和函数实现签名不一致地使用const可以吗?
- C++模板、方法原型和实现