使用用户定义的文字对字符串进行编译时加密
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::string
和 std::basic_string
通常没有 constexpr
构造函数。
因此您必须使用 const char []
作为元编程的输入;之后,您可以将其分配给 std::string
.
注意:元编程有一些您需要考虑的限制:您无法访问您本来可以使用的许多工具,例如 new
或 malloc
,例如:您必须分配堆栈你的变量。
*编辑: 不完全是 UDL,如@m.s。指出。实际上,您会收到一个指向 const char
s 的指针和字符串的长度。这在 constexpr
场景中非常严格,我怀疑是否有可能找到一种方法来处理该字符串。在 "normal" 元编程中,您可以将大小作为常量表达式,编译时加密是可能的。
我知道新的 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::string
和 std::basic_string
通常没有 constexpr
构造函数。
因此您必须使用 const char []
作为元编程的输入;之后,您可以将其分配给 std::string
.
注意:元编程有一些您需要考虑的限制:您无法访问您本来可以使用的许多工具,例如 new
或 malloc
,例如:您必须分配堆栈你的变量。
*编辑: 不完全是 UDL,如@m.s。指出。实际上,您会收到一个指向 const char
s 的指针和字符串的长度。这在 constexpr
场景中非常严格,我怀疑是否有可能找到一种方法来处理该字符串。在 "normal" 元编程中,您可以将大小作为常量表达式,编译时加密是可能的。