几个模板问题(已经解决了…只是想知道为什么)
A Few Template Questions (already solved... just want to know why)
因此,我正在为一项作业开发一个模板化Vector类,我在谷歌上发现了一些问题,但我仍然想知道为什么我所做的是错误的。第一个问题是我有:
template <typename T>
class Vector
{
...
template <typename T2>
Vector(const Vector<T2> &other);
}
template <typename T, T2>
Vector<T>::Vector(const Vector<T2> &other)
{
...
}
这在VS11中给了我一个"无法将函数定义与现有声明匹配"的问题。我通过将模板定义放在单独的行上来修复它:
template <typename T>
template <typename T2>
Vector<T>::Vector(const Vector<T2> &other)
{
...
}
但我仍然不知道为什么需要这样做。我知道第一个定义对于使用多个模板的函数/类是有效的,但为什么在将模板化类与模板化成员函数混合时语法会发生变化呢?
我的第二个问题与模板类内部的类型有关。在编写迭代器时,我有以下函数:
template <typename T>
class Vector
{
...
class iterator
{
...
iterator &operator++(void);
}
}
template <typename T>
Vector<T>::iterator &Vector<T>::iterator::operator++(void)
{
...
}
这给了我"依赖名称不是类型",后来我发现我需要在前面添加"类型名称":
template <typename T>
typename Vector<T>::iterator &Vector<T>::iterator::operator++(void)
{
...
}
在谷歌上搜索了警告号(这导致了一个错误(后,我意识到了错误存在的原因,但编译器不知道Vector<T>::iterator
是一个类型的原因并不太明显。我的意思是,它有类的定义,所以…
不管怎样,谢谢你为我澄清了这几件事!
template <typename T>
template <typename T2>
Vector<T>::Vector(const Vector<T2> &other)
{
写入也是有效的
template <typename T> template <typename T2>
Vector<T>::Vector(const Vector<T2> &other)
{
你只需要(?(把它写成两组,因为它们毕竟是两组参数——第一组用于类,第二组用于函数。
依赖类型和相关规则的typename
(模板基类成员的this
和模板成员函数(?(的template
(与"两阶段查找">有关。然而,这在MSVC++上实现得很糟糕(就像在not中一样(,因此它可能不会像符合要求的实现那样抛出那么多错误。
更多信息-http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.htmlhttp://womble.decadent.org.uk/c++/template faq.html#消除歧义http://eli.thegreenplace.net/2012/02/06/dependent-name-lookup-for-c-templates/
- 我想知道长双倍和双倍之间的区别
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- C++新手,想知道如何使用VS code 2019播放音频文件
- 我是C++新手,我想知道,为什么在c ++中使用纯虚函数?为什么要使用纯虚函数?
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 我想知道我是否可以将一个类分配给特定的成员数据并创建该类的实例
- 我想知道变焦和轨道在哪里出了问题
- 我创建了一个库,想知道设计是否效率低下
- 想知道我哪里错了
- 我想知道我将如何实现 + 运算符重载.我已经从我上一个问题中计算出 += 运算符重载
- 将VS2013 更新为VS2019会导致左值错误,想知道原因
- 我想知道如何将所有数值与没有任何空格的字符串分开,就像 123we45rt75 一样
- 我想知道在构造函数中初始化变量时的生命周期
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- 想知道为什么我不能只捕获协程的 asio::handler_type 的引用
- 我想知道为什么Asset_manager(Android NDK)没有界面目录的接口
- OpenGL ES 3 (iOS) 纹理奇特 - 想知道为什么
- 想知道我为什么会有隔离故障
- 几个模板问题(已经解决了…只是想知道为什么)