簡體   English   中英

C ++鏈接以重載<<函數(記錄器類)

[英]C++ linking for an overloaded << function (logger class)

我目前正在為我的C ++項目編寫一個記錄器(我需要它幾乎沒有依賴關系,所以我不想采用預先編寫的記錄器)。 它包含以下功能:

template <typename T>
Logger& Logger::operator<<(T f) {
  m_file<<f;
  return *this;
}

logger.cpp代碼可以編譯,但是當我在main.cpp中調用日志函數時,出現此編譯器錯誤:

/home/tuxer/prog/cpp/PRay/server/src/main.cpp:110: undefined reference to `Logger& Logger::operator<< <int>(int)'

對於這一行代碼:

log<<lul; (lul being a int variable equals to 2)

正確包含了logger.o文件,因為Logger :: init()函數可以正常工作,並且不會引發任何鏈接錯誤。 謝謝 :)

由於具有非內聯模板,因此需要強制實例化。 例如,請參閱如何強制實例化C ++模板的特定實例?

簡單的操作是將Logger::operator<<模板放在頭文件中。 編譯器將自動實例化所需的版本,鏈接器將刪除重復的副本(至少,沒有內聯的副本)。

除非鏈接器較舊(例如,gcc 2.7或更早版本),否則無需強制實例化。

這是模板代碼的一般規則:除非您有充分的理由,否則將定義放在頭文件中。

請參閱為什么只能在頭文件中實現模板? 也一樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM