Function passed as template argumentについては、Ben Supnikによって提供されたコミュニティWikiの回答が、インスタンス化された関数テンプレートのインライン化の問題について説明しています。その答えはテンプレート関数のインスタンス化がインライン化されないことが明らかなのはなぜですか?
次のコードです:
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);
答えは(関数テンプレートdo_op
をインスタンス化し、最終的なライン、との点で)これを言うためにに行く:
明確にこのインラインになっていません。
私の質問は次のとおりです。なぜこれがインライン化されていないのは明らかですか?
それはできないかもしれない理由はありませんが、それをしようとしない理由もたくさんあります。私が誤って知らされていないなら、C(およびC++)コンパイラはかなり最近までインライン化の目的で関数ポインタの追跡を試みていませんでした。 –
@ KonradRudolph - 確かに、それは**インラインになっていないことは明らかです**。それはまったく明らかではありません。 –