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

标签 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

但我不希望依赖于 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/

相关文章:

c++ - 是否可以在 C++ 中使用 nmap 功能?

unit-testing - 单元测试移动/复制构造函数的策略?

c++ - std::for_each 实现的限制

c++ - std::swap 不可复制但可 move 的结构

c++ - 为什么在这两种情况下使用 C++ 模板会出现差异?

c++ - 如何使用指向泛型模板类的指针来访问依赖于模板参数类型的成员函数

c++ - 即使 nm 报告存在符号,运行时也会出现符号查找错误

c++ - 提供用户定义的移动构造函数时,Visual Studio 2013 不会删除复制构造函数

c++ - 推导原始类型的知识,同时转发

c++ - 在 Windows 桌面共享 API 上,UAC 提示变为黑色暂停屏幕