В 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;
}
Задача ещё не решена.