我有以下代码示例:
\n#include <iostream>\n\ntypedef struct MyStruct {\n int member;\n} crake;\n\n#define GPIOA ( 0x40000000)\n\ntemplate <typename T, crake* Ptr>\nstruct MyTemplate {\n void doSomething() {\n Ptr->member = 42;\n }\n};\n\n\nint main() {\n crake* ptr = reinterpret_cast<crake*>(GPIOA);\n MyTemplate<MyStruct, reinterpret_cast<crake*>(GPIOA)> instance;\n instance.doSomething();\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n我用 C++20 编译了它。有趣的是我得到了一个错误
\nMyTemplate<MyStruct, reinterpret_cast<crake*>(GPIOA)> instance;
但不是在之前的行中,我做了同样的事情,即重新解释将整数转换为指针。
\n确切的错误消息是:
\n"error: \xe2\x80\x98reinterpret_cast\xe2\x80\x99 from integer to pointer\n 29 | MyTemplate<MyStruct, reinterpret_cast<crake*>(GPIOA)> instance;"\nRun Code Online (Sandbox Code Playgroud)\n我的目标是获取定义为常量值(带有#define)的结构体的地址作为非类型模板参数。我知道这会崩溃,但实际上,地址后面有一个外设,写入它是可以的。所以我认为,我需要使用 const 变量,但我想避免这种情况。