相关疑难解决方法(0)

C++在编译时将整数转换为字符串

我想做这样的事情:

template<int N>
char* foo() {
  // return a compile-time string containing N, equivalent to doing
  // ostringstream ostr; 
  // ostr << N;
  // return ostr.str().c_str();
}
Run Code Online (Sandbox Code Playgroud)

似乎boost MPL库可能允许这样但我无法弄清楚如何使用它来实现这一点.这可能吗?

c++ string templates boost boost-mpl

17
推荐指数
4
解决办法
8441
查看次数

如何从三个整数(或者可能是git/SVN commit/rev.string)生成constexpr版本字符串?

说我有

constexpr const std::uint8_t major = 1;
constexpr const std::uint8_t minor = 10;
constexpr const std::uint8_t bugfix = 0;
Run Code Online (Sandbox Code Playgroud)

而且我要

constexpr const char* version_string(){ ... }
Run Code Online (Sandbox Code Playgroud)

要返回"1.10.0"本例中的等价物,我该怎么做?

我假设我需要这两个,在constexpr:

  • 整数到字符串转换
  • 字符串连接

这个问题纯粹是学术性的,constexpr除了"有可能"之外,我认为实际上没有任何用处.我只是看不出这会如何发展.我愿意接受适用于GCC 4.9和Clang 3.4/3.5的C++ 1y解决方案.

我相信我在日本的一些博客上发现了几乎所有的东西:

我会看到我能用这些做些什么,也许当我对结果感到满意时,我自己回答这个自称有趣的问题.

c++ itoa strcat constexpr c++11

11
推荐指数
2
解决办法
1575
查看次数

是否可以在编译时生成字符串?

在下面的示例中,我snprintf在模板函数内部使用来创建包含模板参数值的字符串N。我想知道是否有办法在编译时生成这个字符串。

template <unsigned N>
void test()
{
    char str[8];
    snprintf(str, 8, "{%d}", N);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates string-formatting compile-time c++11

3
推荐指数
1
解决办法
723
查看次数

如何解释Variadic模板中的继承?

我遇到过这篇文章: 使用constexpr将数字转换为字符串文字

答案非常有趣:

namespace detail
{
    template<unsigned... digits>
    struct to_chars { static const char value[]; };

    template<unsigned... digits>
    const char to_chars<digits...>::value[] = {('0' + digits)..., 0};

    template<unsigned rem, unsigned... digits>
    struct explode : explode<rem / 10, rem % 10, digits...> {};

    template<unsigned... digits>
    struct explode<0, digits...> : to_chars<digits...> {};
}

template<unsigned num>
struct num_to_string : detail::explode<num> {};
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. "struct explode:explode"声明爆炸继承自爆炸; 怎么样"struct explode <0,digits ...>:to_chars"?

  2. '0'作为第一个模板参数的功能是什么?

谢谢!

c++ c++11

2
推荐指数
1
解决办法
103
查看次数