我有一個代碼:定義VS命名空間
namespace My
{
#define sptr std::shared_ptr;
}
它在很多地方使用。現在我已經將這個代碼作爲庫包含到了qt項目中,並且因爲某處使用sptr
作爲變量名稱而無法加載。
我可以修改Qt頭和重命名變量,但這在可移植性方面不好。解決這個問題的最好方法是什麼? typedef
不能與模板一起使用。我知道黑客模板結構,但我仍然需要修改我的代碼。
我有一個代碼:定義VS命名空間
namespace My
{
#define sptr std::shared_ptr;
}
它在很多地方使用。現在我已經將這個代碼作爲庫包含到了qt項目中,並且因爲某處使用sptr
作爲變量名稱而無法加載。
我可以修改Qt頭和重命名變量,但這在可移植性方面不好。解決這個問題的最好方法是什麼? typedef
不能與模板一起使用。我知道黑客模板結構,但我仍然需要修改我的代碼。
namespace ns {
template<typename T>
using sptr = std::shared_ptr<T>;
}
請參閱@Kerrek SB對此特定用例問題的評論。
您可以使用以下方法:
template<typename T>
struct sptr : std::shared_ptr<T> { };
這是std::shared_ptr
圍繞一個簡單的包裝。這將在C++ 2003和C++ 11中起作用。
你的代碼肯定會工作,但沒有進一步的工作,例如'sptr
你說得對。 ctors應該重複。 –
預處理器指令不受命名空間的限制。 –
@jeffamaphone我知道。現在它給我描述了問題。 – Ockonal
'auto p = std :: make_shared();'。使用C++ 11時,你想明確地說「shared_ptr」的時間應該很少。 –