2013-05-05 34 views
0

那麼,這是不是一個真正的編程問題,但更多的好/壞的做法命名空間包含在報頭和模板類

我的工作我的CSP當然最後的項目是與幾個求解器庫。大多數課程都是模板化的。 AFAIK沒有優雅的方式來分離源代碼和頭文件,以獲得乾淨的二進制和開發人員。其實在這裏沒有真正的二進制。代碼生成階段將在最終代碼中由編譯器完成。

另一方面,我使用boost asio庫以便攜式的方式進行網絡連接。從基礎編程課程中,我知道在標題中使用using namespace是一種不好的做法。因爲這樣做會限制最終用戶在他/她的私有代碼中使用更有限的命名選項,並且更容易出現衝突。

最後,爲了使代碼清晰,我想在我的代碼中使用unisg namespcaeusing。我的問題是最好的方法是什麼?我做錯了嗎?目前我使用using S的內部函數頭(未在全局範圍內)是這樣的:

// File : abt-solver.h 
template<typename valueType> 
inline void AIT::ABT_Solver<valueType>::connect() { 
    using boost::asio::ip::tcp; // <===== Here 
    using namespace std;   // <===== And here 
    tcp::resolver::query query(this->address, this->portNumber); 
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
    tcp::resolver::iterator end; 
    boost::system::error_code error = boost::asio::error::host_not_found; 
    while (error && endpoint_iterator != end) { 
    // blah blah blah ... 

回答

1

由於在有限範圍內使用using不影響包含文件的父命名空間或命名空間,所以我沒有看到任何問題。

關於從聲明源的分離: 升壓使用以下方案: 聲明駐留在* .HPP文件和實現是在另一個文件中(ⅰ想不起擴展大氣壓)。

在hpp htey的末尾包含帶有定義的文件。 當然,你必須記住,在implmentation文件中聲明的每個東西對於標題也是可見的。所以仍然不允許使用

3

是的,這很好的功能範圍內使用using,它不會影響功能以外的任何東西。