簡體   English   中英

C ++模板的聲明和定義分隔

[英]Declaration and Definition Separation for C++ Templates

因此,最近我在使用模板元編程(使用《 現代C ++設計 》一書作為當前參考)建立個人庫方面一直取得進展。

我一直在考慮布局模板代碼的最佳方法。 顯然,編譯器希望模板的定義在聲明的同一文件中可見。 但是,我想將聲明與定義分開,所以當我只想查看方法原型或其他內容時,我的工作量就更少了。

因此,要解決此問題,可以通過以下示例說明我開始要做的事情:

SomeClass.hpp

#ifndef _someclass_hpp
#define _someclass_hpp

template<typename T>
class SomeClass {
public:
...
private:
...
};

#include "SomeClass_Implementation.hpp"

#endif

SomeClass_Implementation.hpp

#ifndef _someclass_impl_hpp
#define _someclass_impl_hpp

#include "SomeClass.hpp"

/* SomeClass Implementation... */

#endif

我個人比較喜歡這樣,而不是將所有內容都保存在一個文件中,但是我很好奇是否有人在處理此問題時有任何技巧,或者有任何可能使我考慮將其全部轉儲到一個文件中的推理。

我喜歡的一種方法是這樣做:

Header.hpp:

#ifndef FileGuard_whatever // technically reserved by STL because
#define FileGuard_whatever // it starts with a capital letter

template <typename T>
class A
{
    void go ( T const& value ) ;
} ;

#include "Header.hxx" // implementation details

#endif // FileGuard

Header.hxx:

template <typename T>
void A<T>::go ( T const& value ) { }

這幾乎就是您要做的。 我在另一個文件中省略了附加的File Guard,並給出了一個名稱,讓人們知道不要導入它。

我很幸運。 人們花了.hxx秒鍾的時間才能解決它,但是.hxx至少可以幫助解決這一問題(“這是不同的;好吧, 有什么不同?”)

暫無
暫無

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

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