Перегрузка метода для спецификаторов адресного пространства по параметру ‘this’

В C ++, использующем clang ++, возможно ли перегрузить метод в соответствии с определителями адресного пространства для неявного параметра «this»? Если так, какой синтаксис?

Этот источник предполагает, что я могу поместить спецификатор адресного пространства после списка параметров, но до фигурных скобок (аналогично использованию константного квалификатора в ‘this’). Я попробовал следующее, но это не удалось; 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 позволяет мне перегружать метод в соответствии с адресными пространствами его явных формальных параметров (не это’). Например, код ниже выведет «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;
}

3

Решение

Задача ещё не решена.

Другие решения