struct das verschiede Werte beinhaltet
-
Tut mir leid für die blöde Überschrift, aber mir fällt nichts besseres ein. Bei der Beantwortung der folgenden Frage ist mir komplett egal, wie schön der code am Ende ist oder wie sehr man Tricksen muss um das zu erreichen, hauptsache es ist irgendwie möglich... Ich würde gern sowas schreiben:
//struktur ist ein struct, a eine Klassenstatische Konstante (oder ein enum-hack) struct::a; //erster Aufruf, wert 1(z.B.) struct::a; //alle anderen Aufrufe, wert 2(z.B.)
Von mir aus kann die Struktur auch template-parameter übernehmen, das einzig wichtige ist das der Aufruf gleich bleibt...
Ist sowas überhaupt möglich?
-
Hab absolut keinen schimmer was du willst bitte ein bisschen klarer ausdrücken
mfg
-
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?