【发布时间】:2013-08-18 13:01:55
【问题描述】:
问题的简单版本:
图书馆.h
typedef library::whatever::something::complicated X;
我可以在不包含 library.h 的情况下前向声明 X 吗?
基本上我想做的是:
Foo.h:
// forward declare X
void foo (const X &);
Bar.h:
#include <library>
typedef library::type<blah>::whatever Bar;
typedef Bar X;
Foo.cpp:
#include <Foo.h>
#include <Bar.h>
foo (const X &) {...
main.cpp:
#include <Foo.h>
#include <Bar.h>
foo (X ());
前提是我不想包含<library>,除非我必须。假设它与其他标头交互不良,但是这些其他标头需要foo 的声明。如果不包含库,将无法调用 foo(),但这是 .cpps 需要担心的事情。
如果我想将 X 类型定义为普通的 C 类,则前向声明 C 就足够了,但这在这里行不通。
我可以将 X 前向声明为 typedef,但只有在我已经有 library::type<blah> 的定义(也许还有 blah 的定义)的情况下才可以使用 AFAIK。
前向声明的重点是不要#include 这些类型的定义。
这是一个相关的问题:
namespace std
{
template <typename T>
class vector;
}
typedef std :: vector <int> Buffer;
void foo (const Buffer &);
#include <vector> // ok until here
int main ()
{
foo (Buffer ());
}
在这种情况下,std::vector 的前向声明与定义不兼容。让我们假设我真的真的不想#include <vector>(或任何外部类)。
有没有办法解决这个问题?
【问题讨论】:
标签: c++ typedef forward-declaration