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;
}