簡體   English   中英

模板類的typedef?

[英]typedefs for templated classes?

是否有可能typedef使用模板long類型? 例如:

template <typename myfloat_t>
class LongClassName
{
    // ...
};

template <typename myfloat_t>
typedef std::vector< boost::shared_ptr< LongClassName<myfloat_t> > > LongCollection;

LongCollection<float> m_foo;

這不起作用,但有沒有辦法達到類似的效果? 我只想避免鍵入和讀取幾乎涵蓋編輯器窗口全寬的類型定義。

不,這是目前不可能的。 它將在C ++ 0X AFAIK中成為可能。

我能想到的最好的是

template<typename T> struct LongCollection {
    typedef std::vector< boost::shared_ptr< LongClassName<T> > > type;
};

LongCollection<float>::type m_foo;

如果您不想使用宏方式,則必須為每種類型創建單獨的typedef:

typedef std::vector< boost::shared_ptr< LongClassName<float> > > FloatCollection;
typedef std::vector< boost::shared_ptr< LongClassName<double> > > DoubleCollection;

不,但你可以使用'幫助'類型來接近,請參閱此示例

Leon所展示的解決方案是規范的。 一點背景知識:這被稱為“(模板)元函數”,因為它基本上是一個在編譯時得到評估的“函數”。 它不是值,而是處理類型:有一個輸入類型列表(類型參數),還有一個“返回值”:typedef聲明類型名稱“type”。

“調用”與普通函數調用類似,盡管語法不同:

// Normal function
result = f(args);

// Metafunction
typedef f<args>::type result;

這個代碼構造是庫中常用的習慣用法,例如Boost庫,甚至在一個地方的STL中: allocator_type::rebind<U>::other完成同樣的事情,唯一的區別是typedef type被稱為other

它並不完全符合您的要求,但根據您的實際情況,這可能會達到預期的效果:

template <typename myfloat_t>
class LongClassName
{
    // ...
};

template <typename myfloat_t>
class LongCollection : public std::vector< boost::shared_ptr< LongClassName<myfloat_t> > > 
{
};

您可能需要根據需要添加一些構造函數或運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM