有一個斯科特舒爾的實現編譯時字符串:轉換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 –