给定一个模板类作为这样对象创建包装:为模板类
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