基于模板参数初始化静态char

时间:2017-02-24 23:33:44

标签: c++ c++11 templates variadic-templates template-meta-programming

我想做这样的事情:

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

但我不希望依赖于提升。

1 个答案:

答案 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()并不困难。