文字列を入力として受け取る関数があるとします。
SomeOutputType f_impl(const char* s);
ほとんどの呼び出しサイトは、入力として文字列リテラルを使用するだけf("Hello, world")
です。コンパイル時に結果を計算するために次の関数を実装したとします。
template <char...> SomeOutputType f_impl();
私の質問は、呼び出しサイトのようなf("Hello, world")
呼び出しがテンプレート化されたフォームをstring s="Hello, world"; f(s.c_str());
呼び出し、一般的な呼び出しサイトが一般的なフォームを呼び出すようにする方法はありますか? 明確にauto s = "Hello, world"; f(s);
するために、テンプレート化されたフォームを呼び出す必要はありません。これs
は、変数になり、コンパイル時の定数ではなくなったためです。
この質問の有用なケースは、最適化printf
です。ほとんどの場合、format
は文字列リテラルになるため、実行時に を解析する代わりに、コンパイル時に多くのことをformat
実行して最適化できます。