我想在 C 中實作一類動態陣列,并且我希望這個實作是通用的。
考慮以下定義:
ef DYNAMICARRAY_H
#define DYNAMICARRAY_H
template<class T>
class DynamicArray
{
public:
DynamicArray();
virtual ~DynamicArray();
protected:
private:
};
#endif // DYNAMICARRAY_H
(我還沒有寫任何方法)。
通常,我們在另一個 cpp 檔案中實作這些方法。但是由于它是一個泛型類,在使用泛型型別的方法編譯之后,我們會遇到聯結器的問題。
另一方面,據我了解,在頭檔案中實作這樣的函式可能會導致編譯器將該函式設為行內函式。
那么實作這些功能的最佳方式是什么?它應該在類定義中嗎?(case1)它應該在類定義之外但在頭檔案中嗎?(案例2)
#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H
template<class T>
class DynamicArray
{
public:
DynamicArray();
virtual ~DynamicArray();
protected:
private:
//Should I implement here right after decleration? (case 1)
};
//Or should I implement here outside of the class definition? (case2)
#endif // DYNAMICARRAY_H
或者也許在 cpp 檔案中并包含以下行:
#include "DynamicArray.cpp"
上面的主要功能?
提前致謝。
uj5u.com熱心網友回復:
另一方面,據我了解,在頭檔案中實作這樣的函式可能會導致編譯器將該函式設為行內函式。
注 1:類中定義的所有函式都是“行內”的。
注2:所有頭檔案中的函式(不是類中的)都應該有inline工程師手動添加的關鍵字,以防止聯結器錯誤。
注意 3:“行內”函式/方法與現代編譯器中的“行內”代碼幾乎沒有關系。這是遠古時代的遺留物,當時人們期望工程師比編譯器更了解底層硬體。如今,這不成立(通常)。
那么實作這些功能的最佳方式是什么?它應該在類定義中嗎?(case1)它應該在類定義之外但在頭檔案中嗎?(案例2)
案例1:是的,這是有效的。
案例2:是的,這也是有效的。
您應該做的是個人喜好(取決于您的編碼標準)。最好的是視情況而定,視情況而定。
或者也許在 cpp 檔案中并包含以下行:
案例3:沒有。這是個壞主意。
雖然我看到有人將代碼放在“*.tpp”檔案中,該檔案包含在“*.h”檔案的底部。可能最好避免。
上面的主要功能?
案例 4:如果您的專案是自包含的,只有一個源檔案,并且您不打算在其他任何地方使用頭檔案,那么可以。否則,沒有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420585.html
標籤:
