C++ 模板化snprintf

C++ 模板化snprintf,c++,templates,printf,C++,Templates,Printf,我需要将一些数字、整数和double转换成std::strings,出于性能原因,无法使用stringstream,我们发现它在并发使用时非常慢 能做这样的事情会很好 template<typename T> static const std::string numberToString(T number) { char res[25]; // next line is a bit pseduo-y snprintf(res, sizeof(res), "%T

我需要将一些数字、整数和double转换成std::strings,出于性能原因,无法使用stringstream,我们发现它在并发使用时非常慢

能做这样的事情会很好

template<typename T>
static const std::string numberToString(T number)
{
    char res[25];
    // next line is a bit pseduo-y
    snprintf(res, sizeof(res), "%T", number);
    return string(res);
}
但我真的不确定如何实现这一目标的最佳方法是什么?

这里有一个想法。使用:

template<typename T>
static const std::string numberToString(T number)
{
    char res[25];
    snprintf(res, sizeof(res), getPrintfFormat<T>(), number);
    return res;
}
它还提供了一个类型安全级别。使用发布的代码,使用

std::cout << numberToString('A') << std::endl;

会导致编译时错误。

STD::to-StrigNeC++。我将调查toSype是否存在与StrugStudiHMM相同的争用问题,StrugFipe本身不应该那么慢,它调用C++格式化程序,只使用内存缓冲区。但是将float或double转换为字符串确实是一个复杂的操作。你为什么说stringstream太慢了?您是否已经分析了您的应用程序以识别瓶颈?关键部分同时使用,这是在rhel7的GCC4.4.7上。我们发现,在单线程的情况下,性能很好,但在一些多线程的紧密循环中,性能很差。我认为这可能是相当具体的,但它是一个瓶颈,你确定它会更快的C++ StrugSu水流?无论如何,这是一个很好的模板用法:-
std::cout << numberToString('A') << std::endl;