der Template-Code ist wie folgt:Wie funktioniert dieser Vorlagencode?
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_;
};
dieser Code funktionieren gut mit Objektklasse wie folgt aus:
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;
, wenn ich diese Vorlage mit Typ wie int, string versucht ...
objectCache<int> intcache();
int* temp = intcache.Get();
*temp = 3;
cout <<temp <<endl;
Ich bekomme E links von "'.Get' muss Klasse/Struktur/Union haben", Ich kann nicht herausfinden, wo das Problem ist
wenn ich
ändernobjectCache<int> intcache;
ich " 'Objectcache': kein geeigneter Standardkonstruktor verfügbar"
Verwendung
objectCache<int> intcache(DefaultInstanceCreator<int>());
I „ '.Get' muss sich gelassen zu bekommen haben class/struct/union "auch.
hinzugefügt Objectcache() {} zu Objectcache-Klasse mit Object < int > intcache funktioniert; jetzt verstehe ich mehr über Vorlage Danke für die Antwort von allen. –