假设我有一个将字符串作为输入的函数:
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在运行时解析。