0
我有一個模板類Foo,其中我想typedef智能指針。模板類中的嵌套類型
AFAIK我不能在課堂外鍵入這個鍵值。下面的代碼(或其變體)將不起作用。
template<typename T>
typedef shared_ptr< Foo<T> > Foo_Ptr<T>;
所以我在類裏面有typedefed shared_ptr和weak_ptr。
template<typename T>
class Foo {
public:
typedef shared_ptr< Foo<T> > Ptr;
typedef weak_ptr< Foo<T> > WeakPtr;
};
這是令人討厭的,因爲我不能在其他頭文件中聲明它。
但我的問題是,無論何時我想聲明一個Foo :: Ptr,我都必須在它之前加上typename。例如
template<typename T>
class Bar {
void do(typename Foo<T>::Ptr p);
}
這句法是有點麻煩,它實際上是更快地寫shared_ptr<Foo<T>>
有什麼辦法?即在任何模板化爲T的上下文中聲明Foo :: Ptr(甚至是Foo :: Ptr)的方法? (例如,Bar類內?)
編輯。
根據丹尼斯的回答,我想用這個
types.h中
template<typename T>
class Foo;
template<typename T>
using Foo_Ptr = std::shared_ptr< Foo<T> >;
template<typename T>
class Bar;
template<typename T>
using Bar_Ptr = std::shared_ptr< Bar<T> >;
foo.h中
#include "types.h"
template<typename T>
class Foo {
public:
};
別處
#include "Foo.h"
template<typename T>
void do_sth(Foo_Ptr<T> p) {
}
哦,這是偉大的感謝。我不知道這種「使用」別名語法。從我讀過的這是一個typedef的超集,我可以在模板中使用它?所以我可以從類內部移除shared_ptr typedefs並將它們全部放在外面?我將用建議的代碼更新我的問題(它在編譯器資源管理器中編譯) – memo