問題的簡單版本:當它的完整類型有一個尚未知的表單時,我可以轉發 - 聲明一個typedef嗎?
library.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就足夠了,但這在這裏不起作用。
只有我已經定義了library::type<blah>
(也可能是blah的定義),我纔可以將X聲明爲typedef,但是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());
}
在這種情況下性病的向前聲明::載體與定義不符。讓我們假裝我真的真的不想#include <vector>
(或任何外部類是它)。
有沒有辦法解決這個問題?