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