使用用户定义的文字对字符串进行编译时加密

Compile time encryption for strings using user-defined literals

我知道新的 C++ 标准允许用户定义文字,并且它们的生成可以在编译时完成。

但是,我对整个模板元编程领域还很陌生,我正在尝试使用一些示例,但仍然没有成功,因为这是我第一次接触这个特定功能。

假设我有一个字符串:

std::string tmp = "This is a test message";

而且我想在编译时使用以下方法加密它:

std::string tmp = "This is a test message"_encrypt;

我想做的事情有可能吗?

我目前正在使用 VS2015,因此非常感谢任何帮助或反馈。

Is it even possible what I'm trying to attempt?

是的,有可能*you可以预先计算并直接放在源代码中的东西,也可以由编译器在编译时完成。

但是,您不能使用 std::string。它不是文字类型。类似于:

 constexpr std::string tmp = "some string literal"

永远不会 编译,因为 std::stringstd::basic_string 通常没有 constexpr 构造函数。

因此您必须使用 const char [] 作为元编程的输入;之后,您可以将其分配给 std::string.
注意:元编程有一些您需要考虑的限制:您无法访问您本来可以使用的许多工具,例如 newmalloc,例如:您必须分配堆栈你的变量。


*编辑: 不完全是 UDL,如@m.s。指出。实际上,您会收到一个指向 const chars 的指针和字符串的长度。这在 constexpr 场景中非常严格,我怀疑是否有可能找到一种方法来处理该字符串。在 "normal" 元编程中,您可以将大小作为常量表达式,编译时加密是可能的。