文字列を入力として受け取る関数があるとします。
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実行して最適化できます。