考虑以下类模板:
template<class T, std::size_t S, SomeEnum = SomeEnum::NOT_DYNAMIC>
class Foo {
Run Code Online (Sandbox Code Playgroud)
其中 SomeEnum 定义为
class SomeEnum { NOT_DYNAMIC, DYNAMIC };
Run Code Online (Sandbox Code Playgroud)
这个类有一个 private std::array,但根据用户传递给 SomeEnum 的值,我想改用std::vector. 例如,如果用户通过SomeEnum::DYNAMIC,我将使用std::vector代替std::array。std::conditional_t这将通过和来实现[[no_unique_address]]。
我想知道是否有一种方法可以“删除”非类型模板参数S,以防用户通过SomeEnum::DYNAMIC。这是为了避免用户在不必要时键入大小,因为底层容器是std::vector。同时,我需要保留S参数,以防用户没有将任何内容传递给SomeEnum,因为std::array也需要大小。
是否可以通过一些技巧来实现,如果不能,我将如何解决这个问题?
目前的想法:
首先我\xe2\x80\x99ll明确表示我知道这段代码是UB。我仍然不确定这是如何运作的。
\n#include <stdio.h>\n\nint x[] = {1, 2, 3};\nchar s[] = "hello";\n\nint main()\n{\n puts(s);\n x[3] = (\'e\' << 16) + (\'y\' << 8) + \'b\';\n puts(s);\n}\nRun Code Online (Sandbox Code Playgroud)\n所以这会打印你好和再见。当然是 UB,但我想知道这里发生了什么。\n我以为我理解小端和大端是如何工作的,但显然 \xe2\x80\x99 不是这样,因为我\xe2\x80\x99一直在查看这已经过去 30 分钟了,但仍然不明白 xe2x80x99 发生了什么。
\n如果可能的话,我真的很感激图表\xe2\x80\xa6
\n我的理解:
\n我不\xe2\x80\x99t 得到:
\n谢谢。
\n