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