In Bezug auf Function passed as template argument, die Community-Wiki-Antwort von Ben Supnik zur Verfügung gestellt diskutiert das Problem der inline-instanziierten Funktionsvorlagen.Warum ist es klar, dass die Instanziierung einer Template-Funktion nicht inline erfolgt?
In dieser Antwort ist der folgende Code:
template<typename OP>
int do_op(int a, int b, OP op)
{
return op(a,b,);
}
int add(int a, b) { return a + b; }
int (* func_ptr)(int, int) = add;
int c = do_op(4,5,func_ptr);
Die Antwort geht auf das zu sagen (in Bezug auf die letzte Zeile, die die Funktion Vorlage do_op
instanziiert): Diese
deutlich wird nicht inline.
Meine Frage ist: Warum ist klar, dass dies nicht inline wird?
Es gibt keinen Grund, warum es nicht könnte, aber es gibt viele Gründe, warum es nicht einmal versuchen würde, das zu tun. Wenn ich nicht falsch informiert bin, haben C (und C++) Compiler nicht einmal versucht, Funktionszeiger zum Zwecke des Inlinens bis vor kurzem zu verfolgen. –
@KonradRudolph - sicher, aber die Behauptung ist, dass ** es ist klar, dass dies nicht inline wird **. Es ist überhaupt nicht klar. –