“this”参数上每个地址空间限定符的方法重载

Nic*_*ick 5 c++ embedded address-space language-extension clang++

在使用 clang++ 的 C++ 中,是否可以根据隐式 \xe2\x80\x98this\xe2\x80\x99 参数上的地址空间限定符重载方法?如果是这样,语法是什么?

\n\n

该来源建议我可以将地址空间限定符放在参数列表之后、大括号之前(类似于在 \'this\' 上使用 const 限定符)。我尝试了以下方法,但失败了;clang 认为我正在尝试设置方法的地址空间,而不是“this”:

\n\n
 // Does not work.\n struct SomeClass\n {\n   // method for \'this\' in default address space\n   void doit();\n   // method for \'this\' in address space 300.\n   void doit() __attribute__((address_space(300)); // clang rejects this syntax\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现的最接近的是 clang 让我根据其显式形式参数的地址空间(而不是 \'this\' )重载方法。例如,下面的代码将打印 \xe2\x80\x9c1\\n2\\n\xe2\x80\x9d。

\n\n
// Similar, but does not solve my problem:\n#include <cstdio>\n\nstruct SomeClass\n{\n  void doit(void *v)     { printf("1\\n"); }\n  void doit(void __attribute__((address_space(300))) *v) { printf("2\\n"); }\n};\n\nint main(int argc, char **argv)\n{\n  SomeClass SC;\n\n  SC.doit( (void*) 0 );\n  SC.doit( (void __attribute__((address_space(300))) *) 0 );\n\n  return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n