下面的代码用于从ASCII代码中获取 std :: string 表示。
string Helpers::GetStringFromASCII(const int asciiCode) const
{
return string(1,char(asciiCode));
}
效果很好。但在我的应用程序中,我在编译时知道ASCII代码。所以我会称之为
string str = GetStringFromASCII(175) // I know 175 at compile time
问题
有没有办法让 GetStringFromASCII 方法成为模板,以便处理在编译时发生,我可以避免每次在运行时调用该函数。
有什么想法吗?
答案 0 :(得分:4)
当您处理原始数据类型(如int
和float
s)时,这种模板元编程很有效。如果您需要一个字符串对象,则无法避免调用std::string
构造函数,并且在编译时无法进行调用。另外,我认为您不能将演员表拖到char
编译时间,这总的来说,这意味着模板无法帮助您。
答案 1 :(得分:3)
不是直接向字符串转换函数提供int常量,而是直接使用字符串常量:
string str("\xAF"); // 0xAF = 175
顺便说一句,除了循环中的大量性能需求之外,某些CPU周期的交易代码可读性很少总体上是有效的。
答案 2 :(得分:0)
这样的事情怎么样:
#include <iostream>
#include <string>
using namespace std;
template <int asciiCode>
inline string const &getStringFromASCII()
{
static string s(1,char(asciiCode));
return s;
}
int main(int, char const**) {
cout << getStringFromASCII<65>() << endl;
}
编辑:现在返回一个参考
答案 3 :(得分:0)
为什么你甚至打扰辅助函数?
string s( 1, char(175) );
这就是你所需要的,而且这是你获得的最快的。