2012-09-02 229 views
1

我有一個代碼:定義VS命名空間

namespace My 
{ 
    #define sptr std::shared_ptr; 
} 

它在很多地方使用。現在我已經將這個代碼作爲庫包含到了qt項目中,並且因爲某處使用sptr作爲變量名稱而無法加載。

我可以修改Qt頭和重命名變量,但這在可移植性方面不好。解決這個問題的最好方法是什麼? typedef不能與模板一起使用。我知道黑客模板結構,但我仍然需要修改我的代碼。

+2

預處理器指令不受命名空間的限制。 –

+0

@jeffamaphone我知道。現在它給我描述了問題。 – Ockonal

+2

'auto p = std :: make_shared ();'。使用C++ 11時,你想明確地說「shared_ptr」的時間應該很少。 –

回答

8
namespace ns { 
    template<typename T> 
    using sptr = std::shared_ptr<T>; 
} 

請參閱@Kerrek SB對此特定用例問題的評論。

+0

這是C++ 11的代碼? –

+0

@AndréOriani,是的。 –

+0

謝謝,效果很好。 – Ockonal

2

您可以使用以下方法:

template<typename T> 
    struct sptr : std::shared_ptr<T> { }; 

這是std::shared_ptr圍繞一個簡單的包裝。這將在C++ 2003和C++ 11中起作用。

+0

你的代碼肯定會工作,但沒有進一步的工作,例如'sptr (new int)'不會。 –

+0

你說得對。 ctors應該重複。 –