有模板的函数参数问题
首先,我有一个句柄类型:
- C/C++ code
// 实现略template<typename T> class MemPoolPointer;
然后,弄个简单的测试类型,里面弄个叫New的类方法,用来生成堆上对象。
- C/C++ code
// 一个forward declarationclass FooBar;typedef MemPoolPointer<FooBar> FooBarPtr;// 实际的定义,无关内容略,不然太多了class FooBar: public Referenced {public: static FooBarPtr New();};
然后,一个有引用计数的指针类型。是在MemPoolPtr上套一层
- C/C++ code
template <typename T> class RefPointer {public: // 关键问题是关于这个构造器的 RefPointer(MemPoolPointer<T>& p);};
下面问题来了:
- C/C++ code
// 这样就不可以,编译时找不到合适的RefPointer函数 RefPointer<FooBar> obj1_p( FooBar::New() );// 这样先建个对象再塞进去就可以 FooBarPtr obj1 = FooBar::New(); RefPointer<FooBar> obj1_p(obj1);
为什么?
多谢啦!!
[解决办法]
FooBar::New()返回一个临时对象,const引用才能引用右值,左值引用不能引用右值。