2014-05-10 42 views
6

我知道一個typedef不能在C++中聲明,但我想知道什麼可能是最好的解決方案,以解決以下問題。我有一個聲明MyClass這樣一個頭文件:正向聲明一個模板類的typedef

#include <TemplateClassHeaders> 

struct MyStruct 
{ 
    // ... 
} 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass在很多地方使用,但大多隻是作爲一個指針正在通過Qt的信號槽機制通過。前向聲明將是所有需要的,但由於MyClass是一種不起作用的typedef。有沒有辦法避免將myclass.h添加到每個使用指向MyClass的指針的頭?

+0

'MyClass類;'谷歌,甚至看建議SO鏈接,當你輸入你的問題,應揭露http://stackoverflow.com/questions/804894/forward-declaration-of-a -typedef-in-c?rq = 1 – mah

+1

@mah給予它第二個想法或至少讀取整個問題而不是自動降低它並指向類似的問題(沒有模板和模板參數)會告訴你'類MyClass'不起作用(即使沒有模板參與,也不會工作,因爲重新聲明)。 – jaho

+0

@Marian,'class MyClass;'如果沒有模板參與,就可以工作。 –

回答

10

您無法轉發聲明typedef。但是,如果您預先聲明瞭它所依賴的類別(TemplateClassNameMyStruct),則應該能夠定義MyClass

namespace Really { 
    namespace Long { 
    template <typename> 
    class TemplateClassName; 
    } 
} 

class MyStruct; 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass *p = 0; 
+0

的確,謝謝。 – jaho

+0

這個醜陋的,不必要的混亂需要修復。我們擁有十億倍以上的高級功能,但「嘿,按名稱使用這個東西」這個簡單的東西基本上是不可能的 - 我們需要內部知識來定義其他人定義的基本**重新創建typedef! – user362515