制作方法模板 - C ++

时间:2009-02-06 04:40:40

标签: c++ templates

下面的代码用于从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 方法成为模板,以便处理在编译时发生,我可以避免每次在运行时调用该函数。

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

当您处理原始数据类型(如intfloat 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) ); 

这就是你所需要的,而且这是你获得的最快的。