首頁 >後端開發 >C++ >模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?

模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-22 05:49:08926瀏覽

Can Templated C   Classes Be Split into .hpp and .cpp Files?

將模板化 C 類拆分為 .hpp/.cpp 檔案:可能嗎?

問題:

嘗試將模板化的C 類拆分為.hpp 和由於未定義對構造函數和析構函數的引用,. cpp 檔案會導致編譯錯誤符號。

main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'

代碼:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

template <typename Type>
class stack {
    public:
            stack();
            ~stack();
};
#endif

#include <iostream>
#include "stack.hpp"

template <typename Type> stack<Type>::stack() {
        std::cerr << "Hello, stack " << this << "!" << std::endl;
}

template <typename Type> stack<Type>::~stack() {
        std::cerr << "Goodbye, stack " << this << "." << std::endl;
}

ack.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}

main.cpp

  • 答案:
答案:

的.cpp 檔案中實作模板化類別並編譯它們是不可行的。實作必須包含在 .hpp 檔案中,因為編譯器在產生模板類別的記憶體佈局和方法定義時需要了解資料類型。嘗試獨立編譯 .cpp 檔案將導致以下問題:

將不會產生帶有類別資訊的目標檔案。 連結器將找不到以下符號目標文件,建置將會失敗。 替代方案解決方案:要隱藏實作細節,請考慮分離資料結構和演算法。建立模板化類別來表示資料結構,而非模板化類別則處理演算法並利用資料結構。這使得可以在單獨的庫中隱藏基本的實作細節,而無需依賴模板類別。

以上是模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn