Ich habe es mit einer C++ - Bibliothek von Drittanbietern zu tun, die umfangreiche Vorlagen verwendet. Das macht es schwierig, eine C-API zu erstellen, um es von meinem Framework zu verwenden.Bridging Templates mit Laufzeitargumenten
das Problem Abstracting an, dass die Bibliothek bietet die Funktion:
template <int i> void foo();
template <int i> void zoo(int v);
ich eine C-API mit dem Funktionskopf erstellen möchten:
extern "C" void c_foo(int i);
extern "C" void c_zoo(int i, int v);
Eine offensichtliche Umsetzung sein könnte:
void c_foo(int i)
{
switch(i) {
case 1: foo<1>(); break;
case 2: foo<2>(); break;
case 3: foo<3>(); break;
default: break;
};
};
und das gleiche auch für void zoo(int)
tun.
Dies funktioniert, wenn der Bereich der möglichen Werte für i
klein ist. Wenn ich alle möglichen Werte von i
in [1.100] behandeln will, dann wird es sehr hässlich Code auf diese Art zu schreiben, da es viele Wiederholungen gibt.
Gibt es einen kompakteren Weg das zu tun, d. H. Weniger Codezeilen schreiben? Vielleicht mit rekursiven Preprozessor-Makros?
_ "Vielleicht mit rekursiven Präprozessor-Makros?" _ Es gibt eine Reihe von Bibliotheken, die Hilfsmakros für solche Aufgaben anbieten. Z.B. der Boost-Preprozessor lib. – user0042