struct das verschiede Werte beinhaltet
-
Eine andere Struktur könnte so aussehen:
struct test { enum{a=4}; };
Benutzen kann man das so:
cout<<test::a;
Wenn man das mehrmals macht, kommt immer 4 dabei raus. (Ist ja eigentlich auch sinn der Sache...) Ich will es irgendwie schaffen, dass beim ersten mal ein anderer Wert rauskommt...
-
Einfach nur krank.
-
Das ist ja mal obskur. Ich wüsste nicht, wo man sowas einsetzen könnte, ohne hinterher mindestens fünf Stunden Big Brother verdient zu haben.
template<typename T> struct InstableValue { T first, def; bool hasBeenFetched; InstableValue(T first, T def) : first(first), def(def), hasBeenFetched(false) { } operator T() { return hasBeenFetched++ ? def : first; } }; struct Beispiel { static InstableValue<int> demo; }; InstableValue<int> Beispiel::demo(1337, 4); cout << Beispiel::demo << Beispiel::demo << endl;
Ungetestet...
-
Sowas?
class a_class { private: bool OpIntCalled; // Wurde op int aufgerufen? public: a_class() : OpIntCalled(false){} operator int() { if(!OpIntCalled) { OpIntCalled = true; return 1; } // else return 2; } }; struct blubb { static a_class a; }; a_class blubb::a; // Test void Funktion(int i) { cout << i << "\n"; } int main() { Funktion(blubb::a); Funktion(blubb::a); Funktion(blubb::a); return 0; }
Für int kannste dann ja den gewünschten Datentyp einsetzen. Ein Template wollt' ich jetzt nicht extra basteln.
EDIT: code falsch
-
Thread Close!
Bitte schnell
-
Jaja, schon klar, das kann ich auch. Ich will aber einen zur kompilierzeit evaluierbaren ausdruck... (Das ist ja die schwirigkeit: beim kompilieren kann man das eben nicht in einem bool-wert speichern.)
/edit: @SeppSchrot: wieso? Das ist eine ernst gemeinte Frage!
-
mit dem präprozessor müsstest du solche spässe machen können. etwa so:
globaler header:#define WERT "inc1.inc"
inc1.inc
#define WERT "inc2.inc" 1
inc2.inc
2
und dann einfach #include WERT hinschreiben, wo es gebraucht wird. geht sicher auch anders. aber blödsinn bleibt blödsinn.
-
Gabs nicht genau die gleiche Frage (oder so ähnlich) hier schon mal vor einiger Zeit? Ist vielleicht was für die FAQ
*michvorlachenwegschmeiss*
-
__COUNTER__
-
COUNTER schrieb:
__COUNTER__
quatsch
-
counter ist leider nicht standardkonform, deshalb auch nicht unbedingt zu verwenden.
mit counter ginge sowas:
template<int i>
struct blub{
static const a=4;
};
template<> struct blub<0>{
static const a=2;
};#define Blub blub<__COUNTER>
benutzung:
Blub::a
ansonsten sollte es unmöglich sein, da die template meta programmierung sowas nicht kann(stichwort compiletimekonstanten), und der präprozessor sonst kein entsprechendes mittel bietet.
-
Hallo,
zum Thema Counter:
http://www.c-plusplus.net/forum/viewtopic.php?t=70054&postdays=0&postorder=asc&highlight=counter&start=0
-
@HumeSikkins: hast dus hinbekommen?
-
ness schrieb:
Jaja, schon klar, das kann ich auch. Ich will aber einen zur kompilierzeit evaluierbaren ausdruck... (Das ist ja die schwirigkeit: beim kompilieren kann man das eben nicht in einem bool-wert speichern.)
/edit: @SeppSchrot: wieso? Das ist eine ernst gemeinte Frage!Und woran machst du fest, was der "erste" Aufruf ist? Klingt jedenfalls schonmal sehr abenteuerlich. *g*
-
Ist mir klar, genau das ist ja das Problem. Funktionieren würde meine Idee nur, wenn der Compiler die templates "cached"... Aber, wenns nicht geht, egal... War nur sone Schnappsidee.
-
was genau willst dud enn machen?