STD ::向量有转换操作员吗?我看到了什么
Does std::vector have conversion operators? What am I seeing?
Visual Studio 2010 Windows 7。
编辑:这是我没有编写的非常古老的代码,这是一个大旧混乱的一部分,深深地植根于代码库。它不会很快改变。不过,我很高兴你们都证实了我的想法:这本身应该是不可能的。
我有等效的代码:
typedef std::vector<Widget*> widget_vector_t;
typedef struct
{
widget_vector_t widget_array_[SOME_SIZE_CONSTANT];
} WIDGET_STRUCT;
然后,在课堂上,我有一个widget_struct成员:
WIDGET_STRUCT widgets_;
在某些成员方法的正文中,我看到了...
Widget *p = widgets_.widget_array_[SOME_INDEX_CONSTANT];
要清楚,我的理解是,这将小部件指针的向量分配给小部件指针。
它有效。
STL向量是否提供了一些铸造运算符或 返回向量中的第一个元素?
我弄清楚了,我很尴尬。
实际的代码有一大堆可怕的Typedefs,Casel Cased and Shitfer,它们都在一个地方,格式不佳。不用说,这是一个bit子,所有的名字都非常相似。
结构中的类型实际上是一个指针,"窗口小部件 *"的类型与窗口小部件指针的向量非常相似。
代码表现得很正常,现有代码库是一块蒸堆,问题最终位于椅子和键盘之间。
感谢您的演奏。
这是一个简单的误解。
向量的定义下面:
vector<int*> a[10];
并不意味着定义A(10型,int*-type)向量,而是您得到(10尺寸,vector<int*>-type)
数组;
STL向量提供了一些铸造操作员或 返回向量中的第一个元素?
相关的东西是阵列返回元素类型的指针:
int* b[10];
然后
int** ptrb = b;
是合法的。
回答您的直接问题:
STL向量提供了一些铸造操作员或 返回向量中的第一个元素?
否。此代码无法编译:
#include <vector>
using namespace std;
class Widget {};
typedef std::vector<Widget*> widget_vector_t;
static const size_t SOME_SIZE_CONSTANT = 10;
static const size_t SOME_INDEX_CONSTANT = 0;
typedef struct
{
widget_vector_t widget_array_[SOME_SIZE_CONSTANT];
} WIDGET_STRUCT;
int main()
{
WIDGET_STRUCT widgets_;
Widget *p = widgets_.widget_array_[SOME_INDEX_CONSTANT];
}
编译器抱怨您正在尝试在vector<Widget*>
和Widget*
之间转换,并且没有可用的转换。
回答您不太直接的问题:
我看到了什么?
其他事情必须在这里您尚未向我们展示。我有一个理论,但这只是一个理论。
在实际代码中,而不是widget_array_
是typedef vector<Widget*>
,也许它实际上是vector
的子类,为其提供了转换操作员。例如:
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
class Widget {};
class widget_vector_t : public std::vector<Widget*>
{
public:
operator Widget* ()
{
return front();
}
};
static const size_t SOME_SIZE_CONSTANT = 10;
static const size_t SOME_INDEX_CONSTANT = 0;
typedef struct
{
widget_vector_t widget_array_[SOME_SIZE_CONSTANT];
} WIDGET_STRUCT;
int main()
{
WIDGET_STRUCT widgets_;
Widget *p = widgets_.widget_array_[SOME_INDEX_CONSTANT];
}
this 将编译 - 它甚至是合法的,而且从我的说法中,合法代码。这也是可怕的,可怕的代码,但我认为您已经知道。
- 无论我使用什么,我的输入都会被跳过
- 我提出什么条件才能再加5%的折扣
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 为什么我看不到字符串?
- 这个编译器错误究竟希望我执行什么?
- 我看过Stellarium代码,我不知道它从哪里开始
- 关于内存泄漏,我有什么不了解的
- mfc CEdit 我应该什么时候进行验证?
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- 有人可以向我解释什么[](int i){返回i%2 == 0;} 方法
- CUDA我的共享内存代码不起作用,我缺少什么
- 无论我投入什么,我都会得到相同的答案
- 如何使用 Open MPI 使我的程序更快?我的 Open MPI 程序目前比原来慢,我有什么不明白的?
- 为什么无论我输入什么,我的时循环一直触发
- 我想将指向 const 对象的指针放入包含非 const 指针的容器中.我有什么选择
- 无论我使用什么作为输入,输出都是零
- 为什么我看不到被捕获的图像
- 编译器在尝试优化/内联我看起来微不足道但并非微不足道的 dtor 时搬起石头砸自己的脚,我做错了什么
- C++ LP64 中通过引用更改我的指针值传递.我应该看什么
- 我看过这个节目.这是什么- re(r), im(i){}在构造函数complex (double r, double i