模板代碼是這樣的:如何使此模板代碼有效?
template <class type1>
struct DefaultInstanceCreator {
type1 * operator()() {
return new type1;
}
};
template < class type1
, class InstanceCreator = DefaultInstanceCreator<type1> >
class objectCache
{
public:
objectCache (InstanceCreator & instCreator)
:instCreator_ (instCreator) {}
type1* Get() {
type1 * temp = instCreator_();
}
private:
InstanceCreator instCreator_;
};
與對象類的代碼工作做好這樣的:
class A{
public:
A(int num){
number = num;
}
int number;
struct CreateInstance {
CreateInstance (int value) : value_ (value) {}
A * operator()() const{
return new A(value_);
}
int value_;
};
};
objectCache< A, A::CreateInstance > intcache(A::CreateInstance(2));
A* temp = intcache.Get();
cout << temp->number <<endl;
當我試圖此模板如int,字符串類型...
objectCache<int> intcache();
int* temp = intcache.Get();
*temp = 3;
cout <<temp <<endl;
我得到è左「‘不用彷徨’必須有類/結構/聯合」, 我不能找出問題出在哪裏
當我改變到
objectCache<int> intcache;
我得到 「 'objectCache':沒有可用的適當的默認構造函數」
使用
objectCache<int> intcache(DefaultInstanceCreator<int>());
我被甩「 '不用彷徨' 中必須有類/結構/聯合「。
將objectCache(){}添加到objectCache類使其與objectCache一起使用< int > intcache; 現在我更瞭解模板感謝大家的回答。 – 2009-07-23 10:31:03