2016-03-08 126 views
2

我目前正在試圖端口代碼到Visual Studio 2012,使得使用模板的別名,就像這樣:模板別名2012

template< typename T > using SmartPtr = std::shared_ptr<T>; 

然而,的Visual Studio 2012不支持模板別名。

是否有可能將上面的聲明替換爲不會破壞使用它的代碼的等價物?

問候

+0

是否使用模板走樣在專業化?繼承可能是一種解決方法。 – Jarod42

回答

2
template< typename T > 
struct SmartPtr 
{ 
    typedef std::shared_ptr<T> type; 
}; 

使用它作爲:

SmartPtr<int>::type 
+0

但是這仍然意味着我必須用SmartPtr :: type代替SmartPtr 代碼中的每個實例嗎? – user5024425

+0

@ user5024425是的,但是如果你不能使用你必須做的模板別名。 – Simple

+0

嗯,如果我嘗試繼承,該怎麼辦:template struct SmartPtr:public std :: shared_ptr < T > {};這可以提供問題嗎? – user5024425

0

你可以嘗試使用宏:

#define SmartPtr std::shared_ptr; 

的工作方式相同的VS2015

+0

SmartPtr位於名稱空間內,因此無法工作。 – user5024425