如果我模板,在C++函數的返回類型:如何有條件地編譯模板函數在返回類型
template<class T> T foo(int x) { };
我可以使用顯式模板特創建double
實例:
template<> double foo<double>(int x) { };
我試圖使用前向聲明來創建未定義的實例:struct
:
struct bar;
template<> bar foo<bar>(int x) { }
此失敗,error: return type ‘struct bar’ is incomplete
。我想認爲這將被允許,即使在閱讀When to use forward declaration?的接受答案之後,因爲直到我創建了foo<bar>
的實例,從未創建明確的模板代碼。顯然情況並非如此(爲什麼不呢?)。
是否有可能在編譯時有類型可能不存在的函數的代碼,並且只有在特定的顯式特化被實例化時才編譯代碼?其動機是一個「重載」的結構讀取器,其中過載操作是在編譯之前(通過腳本)程序化生成的。
您能否讓腳本生成專門化? –
我認爲編譯錯誤是因爲你的函數返回一個編譯器一無所知的條(不僅僅是一個指向條的指針或引用)。你可能需要做一些預處理器的東西,但我並不確定。 – NKamrath