【发布时间】:2016-05-27 22:49:05
【问题描述】:
在我的头文件中,我想避免使用#include,但我的类将有一个向量或指向向量的指针。我只满足于一个指针,但我不知道如何声明它。我是否必须将其声明为 void* 并始终投射它?那会很蹩脚。
// What do I type here to forward declare vector?
class Counters
{
Counters();
void inc(const char* s);
void print();
void clear();
private:
std::vector<int>* Counts;
int total;
};
请注意,我只想将指向容器的指针存储在我的类中,而不是容器中。指针的大小是已知的,不需要参考容器的声明,所以请不要回答说不能这样做,因为编译器需要知道容器的声明。
【问题讨论】:
-
“在我的头文件中我想避免使用#include” 问题就在这里,只包含你需要的。
-
为什么要避开
#include <vector>?这样做应该没有任何害处。 -
前向声明的存在是有原因的,伙计们。有大量关于修剪 #includes 以减少重新编译、改进编译时间、提高可移植性、打破循环依赖等的文献。在我的情况下,这个声明将被 CUDA 编译器以及主 C++ 编译器使用,非常值得尝试以避免在 CUDA 将解析的代码中包含太多废话。相信我。
-
@Brian,这不是重复的。我研究了“转发声明一个 STL 容器?”这个问题。在我发布之前彻底。前向声明指针和数据结构之间存在巨大差异。我的情况对编译器来说很容易;我只需要弄清楚前向声明的语法。
-
@AlltheRage 我知道问题不同,但答案是一样的。您不能转发声明
std::vector或其他标准库容器,因为在大多数情况下,将您自己的声明添加到namespace std是未定义的行为。
标签: c++ pointers stl forward-declaration