1樓:Kendy
實現是可以寫在cpp中的,但是使用時需要在cpp中再特例化宣告一遍。例如想用到乙個c++17的enum庫,但是整個工程只支援C++11的,只想用到那個enum庫的cpp檔案用C++17編譯,這時就需要在該cpp檔案裡面去實現了:
//myenum.h
template
extern T g_GetEnumValue(const std::string& str);
//myenum.cpp
#include "myenum.h"
#include "magic_enum.hpp" //這個標頭檔案是c++17的,如果在.h包含那麼會導致其他C++11的cpp包含了該頭都會報錯
#include "myenum_defs.h" //這個標頭檔案包含了一些enum的定義,例如MyEnum
template
T g_GetEnumValue(const std::string& str)
//要特例化宣告模板:
template MyEnum g_GetEnumValue(const std::string& str);
這樣,就可以在其他cpp裡面包含myenum.h,使用 MyEnum g_GetEnumValue(const std::string& str);這個函式了。
如果要轉其他Enum,需要繼續新增特例化宣告。
2樓:YZRUS
乙個標頭檔案 .h
乙個模板實現檔案.hpp
乙個普通實現.cpp
.h檔案最後一行 include .hpp檔案PCL點雲庫就是這麼弄的感覺還是蠻清晰的
3樓:exiledkingcc
template實現一般都是放在標頭檔案裡面。不然,使用者沒辦法例項化。
至於難不難看,那是見仁見智。可以先把介面寫在一起,實現放在後面,這樣會好一些。
C 模板程式設計時為什麼會出現這種奇怪的行為?
暮無井見鈴 題外話 或許你需要的是乙個取反器 C 11 template Fn class notter template Args auto operator Args arg decltype fobj std forward arg notter const notter default no...
C語言能否通過結構體實現物件導向程式設計?
藍彼得 能!而且在有些嵌入式系統裡就是這麼做的,因為效能和資源。實際上物件導向語言最終也是通過過程式語言來實現的。用C語言實現物件導向,首先要手動的構建一些基礎設施,比如你要有乙個基類,用巨集 結構和函式指標來封裝基本的物件導向功能。繼承乙個類要遵循你自己定義的程式設計規範,基本上就是繼承父類的結構...
怎麼把C 的併發程式設計玩出花來?
想要花就需要你自己搞一套庫,設計一套與眾不同的風格,不過再花不也不可能比executors更花 timed single thread context context 乙個支援定時器的執行緒 auto scheduler context.get scheduler std atomic count ...