有没有办法获得这样的行为?
// Some definition(s) of operator "" _my_str
// Some definition of function or macro MY_STR_LEN
using T1 = MY_STR_LEN("ape"_my_str);
// T1 is std::integral_constant<std::size_t, 3U>.
using T2 = MY_STR_LEN("aardvark"_my_str);
// T2 is std::integral_constant<std::size_t, 8U>.
似乎没有,因为字符串文字会立即传递给some_return_type operator "" _my_str(const char*, std::size_t);
而永远不传递给文字操作员模板(2.14.8 / 5)。该size函数参数不能用作模板参数,即使它几乎总是一个常量表达式。
但似乎应该有某种方法来做到这一点。
答案 0 :(得分:4)
阅读C ++ 11 2.14.8仔细揭示“文字运算符模板”仅考虑数字文字,但不表示字符串和字符文字。
但是,以下方法似乎为您提供constexpr访问字符串长度(但不是指针):
struct MyStr
{
char const * str;
unsigned int len;
constexpr MyStr(char const * p, unsigned int n) : str(p), len(n) {}
};
constexpr MyStr operator "" _xyz (char const * s, unsigned int len)
{
return MyStr(s, len);
}
constexpr auto s = "Hello"_xyz;
测试:
#include <array>
using atype = std::array<int, s.len>; // OK