我想做这样的事情:
template<typename T>
const char * toStr(T num)
{
thread_local static char rc[someval*sizeof(T)] str = "0x000...\0"; // num of zeros depends on size of T
// do something with str
return str;
}
我猜我需要做一些模板元编程,但我不知道从哪里开始。
编辑:
我在这里找到了一个相关的问题:How to concatenate a const char* in compile time
但我不希望依赖于提升。
答案 0 :(得分:2)
不确定你想要什么,但是......如果你想要编译时创建str
初始值并且你接受toStr()
调用和辅助函数({{1}在下面的示例中)C ++ 14示例如下:
toStrH()
如果您需要C ++ 11解决方案,请替换#include <utility>
template <typename T, std::size_t ... I>
const char * toStrH (T const & num, std::index_sequence<I...> const &)
{
static char str[3U+sizeof...(I)] { '0', 'x', ((void)I, '0')..., '\0' };
// do someting with num
return str;
}
template <typename T>
const char * toStr (T const & num)
{ return toStrH(num, std::make_index_sequence<(sizeof(T)<<1U)>{}); }
int main()
{
toStr(123);
}
并std::make_index_sequence()
并不困难。