提案n4121看起来好像要添加一个std::string_literal类型.它包含如下代码:
template<size_t n> struct string_literal { char data [n]; }
Run Code Online (Sandbox Code Playgroud)
和:
template <size_t N>
constexpr int stoi( const string_literal<N>& str,
size_t* idx = 0, int base = 10);
Run Code Online (Sandbox Code Playgroud)
这是我的Number类:
template <typename T>
struct Number
{
private:
T t;
public:
constexpr Number(const T& t)
: t(t)
{
}
constexpr Number(const std::string& s);
constexpr operator T() const
{
return t;
}
};
template <>
constexpr Number<int>::Number(const std::string& s)
: t(std::stoi(s))
{
}
Run Code Online (Sandbox Code Playgroud)
我已经看过如何在编译时将C字符串转换为int?但它只适用于C字符串.并且c_str()是非constexpr.另外最重要的是,这并不能掩盖stol …