要回答您的直接问题:
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];
}
编译器抱怨您试图在 avector<Widget*>
和 a之间进行转换Widget*
,并且没有这样的转换可用。
要回答您不太直接的问题:
我在看什么?
这里一定发生了一些你没有向我们展示的事情。我有一个理论,但这只是一个理论。
在实际代码中,它可能实际上是为其提供了转换运算符的子类,而不是widget_array_
a 。例如: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];
}
这将编译——它甚至是合法的,据我所知,合法的代码。这也是可怕的、可怕的代码,但我想你已经知道了。