4

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

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

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

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

// Similar, but does not solve my problem:
#include <cstdio>

struct SomeClass
{
  void doit(void *v)     { printf("1\n"); }
  void doit(void __attribute__((address_space(300))) *v) { printf("2\n"); }
};

int main(int argc, char **argv)
{
  SomeClass SC;

  SC.doit( (void*) 0 );
  SC.doit( (void __attribute__((address_space(300))) *) 0 );

  return 0;
}
4

0 回答 0