biowep
05-11-2014, 18:07
Salve, ho trovato in giro questa classe molto interessante ma non capisco la dichiarazione del costruttore:
class str_const { // constexpr string
private:
const char* const p_;
const std::size_t sz_;
public:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) : // ctor
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_;
} // size()
};
Si tratta di una classe in grado di gestire stringhe literal type.
Quello che volevo sapere è il significato di:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) {}
Non capisco né il template ne l'argomento della funzione.
class str_const { // constexpr string
private:
const char* const p_;
const std::size_t sz_;
public:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) : // ctor
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_;
} // size()
};
Si tratta di una classe in grado di gestire stringhe literal type.
Quello che volevo sapere è il significato di:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) {}
Non capisco né il template ne l'argomento della funzione.