S
Original erstellt von HumeSikkins:
Hallo,
ich befürchte es wird ziemlich schwer eine Meinung dazu abzugeben, da die Informationen dafür meiner Meinung nach nicht ausreichend sind.
sorry, ich versuchs besser zu erklären.
Damit scheint mir das mit dem Variablen Rückgabewert erstmal unmöglich zu sein. Singleton ist kein Template, also hast du keinen Templateparameter zur Verfügung. foo ist virtuell, also kann es kein Membertemplate sein.
das ist die momentane lösung.
eine änderung des designs ist durchaus möglich.
Das verstehe ich nicht wirklich. Deshalb eine vielleicht naive Frage:
Defaultparameter sind nicht möglich?
ne, default params gehen nicht
Beispiel:
int main()
{
Session::Init<std::string, SaveToFile>();
Session* p=Session::Instance();
}
so könnte es momentan aussehen.
SaveToFile bestimmt WO gespeichert wird. (zB in einer Datei, Datanbank, oder sonstwo)
Wohin gespeichert wird, ist aber für den rest des programmes uninteressant.
nun kann aber folgendes sein:
int main()
{
if(argc==2 && !strcmp(argv[1],"to_db")
{
Session::Init<std::string, SaveToDB>();
}
else
Session::Init<std::string, SaveToFile>();
Session* p=Session::Instance();
}
für die semantik des programms ist es ja egal wohin gespeichert wird.
jetzt will ich irgendwo anders einfach:
Session* p=Session::Instance();
p->write("Hallo");
ob "Hallo" jetzt in einer DB oder einem File steht, ist dann eigentlich nicht wichtig.
Wichtig ist natürlich, ob std::string, AnsiString, QString oder sonstwas gespeichert wird.
Der Rest ist mir irgendwie völlig unklar. Vielleicht würde es helfen, wenn du noch mal genauer beschreibst, was du eigentlich vorhast.
das ganze ist für meine CGI Library.
der Programmierer will uU nicht std::string verwenden, sondern eine andere Implementation (weil ich Libraries nicht mag, die einem eine string klasse vorgeben)
das ergebnis soll sein, dass ich folgendes machen kann
//irgendwo in main()
Session::Init<string, SaveToFile>(); //oder andere syntax
//wichtig ist - ein singleton mit 2 policies wird angelegt:
//SaveToFile speichert die übergeben daten (uU muss es auch SaveToFile<string> heissen)
//string ist der datentyp der gespeichert werden soll
//irgendwo im programm
Session* p=Session::Instance();
//oder auch Instance<string>
//hier wird der Singleton angesprochen - ob SaveToFile oder SaveToDB
//ist hier nicht bekannt. hier weiss man nur, dass man string verwendet
p->write("hallo");
//schreibe entweder in ein file oder eine db - völlig egal.
//string "hallo" wird gespeichert, wohin interessiert nicht.
ich hoffe es ist klar... ansonsten einfach nachfragen.
danke!!!