In meinem Code verwende ich etwas wie folgt aus:Was sollte ich anstelle von Vorlagen verwenden?
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
für eine Reihe von Kompilierung-Konstanten, für die ich dort sicherstellen wollen, wird keine Laufzeitspeicher sein; und ich habe ein paar Funktionen, die diese Konstanten verwenden. N ist eine Konstante, die wir von woanders bekommen.
Nun möchte ich meinen Code nehmen und ihn templatisieren: N ist keine globale Konstante mehr, sondern ein numerischer Template-Parameter. Nun, wenn ich das tat:
template <size_t N> f()
{
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
}
Das würde funktionieren; aber - es beschränkt mich darauf, diese Konstanten in einer einzigen Funktion zu verwenden; Ich möchte mehrere haben. In C++ können wir nicht haben
template <size_t N>
enum {
foo = sizeof(some_type_t) < 32 ? 1 : 2,
bar = some_constexpr_function() - N,
baz = foo + bar,
// etc.
}
Was würde eine elegante, oder vielleicht die idiomatische, Art und Weise das Äquivalent dieser templatization zu erreichen?
Wie erwarten Sie auch diese mit anonymen enum arbeiten – Sopel
ich einige [ähnliche Sachen] getan haben (https://gist.github.com/makulik/7963331) einmal. – user0042
Ich verstehe nicht wirklich, was ist der Punkt des Zählers hier. Definieren Sie einfach normale Konstanten. Der Ausdruck "Ich möchte nicht, dass es einen Laufzeitspeicher für" gibt, ist etwas seltsam, denn wenn Sie sie für einige Laufzeitberechnungen verwenden, werden sie höchstwahrscheinlich nach Wert kopiert. – VTT