Ich habe eine Template-Klasse, die von zwei Template-Parametern abhängig ist, um ihre Werte zu berechnen, aber nur eine für die Konstruktion. Ich möchte die Abhängigkeit von der Sekunde während seiner Lebenszeit entlasten. Ich schaue mir das an, indem ich eine statische Template-Funktion verwende, um die Werte zu berechnen und dann eine Instanz zu erstellen. Alle Mitglieder in dieser Klasse sind const POD-Typen und es wird ein Großteil dieser Klasse beim Start der Anwendung erstellt werden.statische Konst-Referenzen zu Provisorien
template < class member >
class FOO {
public:
FOO() : a(7) {};
template < class scope >
static FOO CreateFOO()
{
return FOO();
};
private:
const int a;
};
template < class member, class scope >
const FOO<member>* function()
{
static const FOO<member>& temp = FOO<member>::CreateFOO<scope>();
return &temp;
}
int main() {
const FOO<int>* b = function< int, int >();
return 0;
}
Ich betrachtete Bewegung Semantik, sondern weil ich einfach const POD-Typen gibt es wirklich enthalten bin, ist nicht Swapping und Bewegen einfach kopieren und zu zerstören. Ist das oben genannte angemessen/gültig? Alles, was ich gelesen habe, deutet darauf hin, dass es in Ordnung ist! Gibt es einen besseren Weg, dies zu tun?
Ich habe keine Gründe sehen für die Verwendung von 'static const Type &' statt 'static Const Typ '. Was denkst du, dass es dich gewinnt? –
Ich kann an einen rvalue binden? ohne zu kopieren? –
Ein Compiler sollte das Kopieren optimieren, wenn Sie das neue Objekt nach Wert zurückgeben, aber dafür gibt es keine Garantie. Ich wünschte, es wäre vorhersehbar, wann das Kopieren stattfindet und wann nicht. – Kos