2011-12-16 81 views
0

編程有多糟?我是一個可怕的人嗎?包括模板頭解決方案

//templates.cpp 
template <typename TYPE> void some_func(int arg1, ...) 
{ 
    //do stuff 
} 

然後:

//templates.h 
#ifndef TEMPLATES_H_INCLUDED 
#define TEMPLATES_H_INCLUDED 

#include "templates.cpp" 
template <typename TYPE> void some_func(int arg1, ...); 

#endif 

最後:

//main.cpp 
#include "templates.h" 

int main ... 
some_func<int>(5); 
std::fprintf(stderr, "ZOMG IT WORKT!\n!\n!\n!"); 

它工作正常的我。它似乎解決了我們很多人關於如何正確分離模板的.cpp和.h文件,然後包含它們而沒有編譯器錯誤的問題。

templates.h文件中的行#include "templates.cpp"基本上等同於將您的聲明和源代碼全部包含在一個文件中。但這種方法很好地將它們分開,這正是我們似乎都在尋找的。

+0

這是嘗試進入FAQ條目嗎? :) – jrok 2011-12-16 19:01:52

+1

這不是一個問題 – 2011-12-16 19:01:59

+0

如果你太可怕,我會避免問互聯網。不要包含`.cpp文件。相反,在頭文件中內聯定義模板並完全放棄實現文件。 – AJG85 2011-12-16 19:02:35

回答

3
  1. 通常帶有模板實現的文件被賦予不同的擴展名。例如boost使用.ipp,其他人可能使用.inl
  2. 這不是我們真正想要的。我們需要的是獨立編譯模板的實現以減少編譯時間依賴性。
2

這實際上是一個很常見的做法,但我覺得你應該把

#include "templates.cpp" 

*.h年底而不是開頭。

此外,您仍然應該將函數標記爲inline