給定一個模板類作爲這樣對象創建包裝:爲模板類
template <typename TYPE>
class SomeClass {
public:
typedef boost::intrusive_ptr<SomeClass<TYPE> > Client_t;
inline Client_t GetClient() { return Client_t(this); }
};
SomeClass的是僅用於經由由SomeClass的:: GetClient()返回的指針的參考文獻中使用。這使得它自然地寫這樣圍繞創建一個包裝函數:
template <typename TYPE>
SomeClass<TYPE>::Client_t New_SomeClass() {
return (new SomeClass<TYPE>)->GetClient();
}
GCC 4.4下編譯上面的代碼:
SomeClass<int>::Client_t some_class = New_SomeClass();
給出了錯誤「‘New_SomeClass’在此範圍內未聲明」
現在我不是模板嚮導,所以在這裏可能有細節我不知道,但我猜我不能使用這種類型的構造,因爲事實上,C++ doesn' t允許在返回類型上重載。
我猜... 哆嗦 ...宏將解決這個問題:
#define NEW_SOMECLASS(TYPE) ((new SomeClass<TYPE>)->GetClient())
auto some_class = NEW_SOMECLASS(int);
但必須有揭露模板類的對象創建一個明智的方式,而不訴諸宏或其他繁瑣的構造?
兩個字:優秀的答案。 – porgarmingduod 2010-01-20 09:13:53