有一个斯科特舒尔的实现编译时字符串:转换constexpr编译字符串转换成一个模板字符列表
class str_const {
const char* const p_;
const std::size_t sz_;
public:
template <std::size_t N>
constexpr str_const(const char(&a)[N]) : p_(a), sz_(N-1) {}
constexpr char operator[](std::size_t n) {
return n < sz_ ? p_[n] : throw std::out_of_range("");
}
constexpr std::size_t size() {
return sz_;
}
};
这是不错,但我想在编译时字符表像string<'H', 'e', 'l', 'l', 'o'>
操作。 有没有办法将str_const
转换成这样的列表?
我能想到的实现路线是模板和函数。通过模板将str_const
转换为其他东西是不可能的,因为str_const
对于非类型模板参数是无效的类型。同样也不可能定义这样的函数,因为根据参数的值,它会有不同的返回值string<...>
。
UPD。编辑摆脱“你的问题可能是重复的”信息,因为从这个问题的文本中可以明显看出,一个字符串不是一个整数。
与此相关的。http://stackoverflow.com/questions/33055791/efficient-way -to-convert-a-compile-time-known-function-argument-to-a-stdintegr –