基于模板参数初始化静态字符



我想做这样的事情:

template<typename T>
const char * toStr(T num)
{
thread_local static char rc[someval*sizeof(T)] str = "0x000..."; // num of zeros depends on size of T
// do something with str
return str;
}

我猜我必须做一些模板元编程,但我不确定从哪里开始。

编辑:

我在这里发现了一个相关的问题:如何在编译时连接一个常量字符*

但我不希望依赖提升。

不确定你想要什么,但是...如果您希望创建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')..., '' };
// 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并不困难。

最新更新