我想做这样的事情:
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
但我不希望依赖于 boost。
最佳答案
不确定您想要什么但是...如果您希望在编译时创建 str
初始值并且如果您接受 toStr()
调用和辅助函数(toStrH()
在下面的例子中)后面是一个 C++14 例子
#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);
}
如果您需要 C++11 解决方案,替换 std::make_index_sequence()
和 std::index_sequence
并不困难。
关于c++ - 基于模板参数初始化静态字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450025/