使用用户定义的文字为字符串编译时间加密

时间:2015-07-31 12:37:11

标签: c++ c++11 visual-studio-2015 c++14 user-defined-literals

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

然而,我对整个模板元编程领域都很陌生,我试图让一些例子继续下去,但仍然没有成功,因为这是我第一次接触这个特殊功能。

所以我想说我有一个字符串:

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

我想在编译时使用以下方法对其进行加密:

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

甚至有可能尝试尝试吗?

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

1 个答案:

答案 0 :(得分:1)

  

甚至有可能尝试尝试吗?

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

但是,您无法使用PostCommand。这不是文字类型。类似的东西:

std::string

从不编译,因为 constexpr std::string tmp = "some string literal" std::string通常没有std::basic_string构造函数。

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

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