c++ - 如何将用户定义的文字放在 C++ 中相同类型的 constexpr 类中?
问题描述
我想实现自己的字符串文字类Literal
和运算符:
constexpr Literal operator""_s(const char* str, size_t size);
class Literal {
friend constexpr Literal operator"" _s(const char*, size_t);
constexpr Literal(const char* str, size_t size);
const char* str = nullptr;
const size_t size = 0u;
};
然后我想在我的类中放置一个空文字:
class Literal {
…
static constexpr const Literal empty = ""_s;
…
};
正如预期的那样,编译器拒绝这种构造,因为此时类不完整。另外我建议它在技术上应该是可能的,因为编译器只需要将一对char* str = nullptr
andsize_t size = 0
放在某处,并empty
在编译时将其分配给我的类的静态实例。
是否有一些“技巧”来实现这样的子句:auto new_literal = Literal::empty;
?
解决方案
是否有一些“技巧”来实现这样的子句:
auto new_literal = Literal::empty;
?
可以添加静态成员函数,
class Literal {
// …
static constexpr Literal empty() { return ""_s; }
// …
}
,并像使用它一样使用它
constexpr auto new_literal = Literal::empty();
但是,请注意
static_assert("" != nullptr);
static_assert(""[0] == '\0');
推荐阅读
- mongodb - 覆盖缺失值的mongodb索引
- reset - 如何调整每个标签页的脚本以重置整个页面并仅重置公式和 Dropbox?
- c# - C# 从对象中获取属性值
- snowflake-cloud-data-platform - 爱因斯坦连接到雪花 - JDBC 错误
- excel - 使用新名称保存后 Excel 无法找到文件
- azure - Can't run my build release task on azure release pipeline error 异常:初始化名为“MSTest”的设置提供程序时出错
- r - 如何增加 facet_wrap 中每个图的大小?
- xslt - 基于新值分组
- c# - c# 序列化对象抛出 System.MissingMethodException
- apache-kafka - Kafka集群配置检查