Spec-Zone.ru › D

core.attribute

Этот модуль содержит УДА (Пользовательские атрибуты), используемые во время выполнения или специальные УДА, распознаваемые компилятором.

Лицензия:
Лицензия Boost 1.0
Авторы:
Jacob Carlborg
Исходный код
core/attribute.d
struct selector;

Используйте этот атрибут для прикрепления селектора Objective-C к методу.

Это специальный атрибут, распознаваемый компилятором. Он имеет несколько требований, которые будут проверяться компилятором:

  • Атрибут может быть прикреплен только к методам или конструкторам, имеющим объектно-ориентированную связку Objective-C. Это относится к методам или конструкторам в классе или интерфейсе, объявленных как
    extern(Objective-C)
    .
  • ,

  • Он не может быть прикреплен к методу или конструктору, являющемуся шаблоном
  • ,

  • Количество двоеточий в строке должно соответствовать количеству аргументов, принимаемых методом.
  • ,

  • Он может быть использован только один раз в объявлении метода

Примеры:
extern (Objective-C)
class NSObject
{
 this() @selector("init");
 static NSObject alloc() @selector("alloc");
 NSObject initWithUTF8String(in char* str) @selector("initWithUTF8String:");
 ObjcObject copyScriptingValue(ObjcObject value, NSString key, NSDictionary properties)
     @selector("copyScriptingValue:forKey:withProperties:");
}
enum optional;

Используйте этот атрибут, чтобы сделать метод Objective-C интерфейса необязательным.

Необязательный метод — это метод, который не обязательно должен быть реализован в классе, реализующем интерфейс. Для безопасного вызова необязательного метода необходимо выполнить проверку времени выполнения, чтобы убедиться, что получатель реализует этот метод.

Это специальный атрибут, распознаваемый компилятором. Он имеет несколько требований, которые будут проверяться компилятором:

  • Атрибут может быть прикреплен только к методам, имеющим объектно-ориентированную связку Objective-C. То есть метод внутри интерфейса, объявленного как extern (Objective-C)
  • Он может использоваться только для методов, объявленных внутри интерфейса
  • Он может быть использован только один раз в объявлении метода
  • Он не может быть прикреплен к методу, являющемуся шаблоном

Примеры:
import core.attribute : optional, selector;

extern (Objective-C):

struct objc_selector;
alias SEL = objc_selector*;

SEL sel_registerName(in char* str);

extern class NSObject
{
    bool respondsToSelector(SEL sel) @selector("respondsToSelector:");
}

interface Foo
{
    @optional void foo() @selector("foo");
    @optional void bar() @selector("bar");
}

class Bar : NSObject
{
    static Bar alloc() @selector("alloc");
    Bar init() @selector("init");

    void bar() @selector("bar")
    {
    }
}

extern (D) void main()
{
    auto bar = Bar.alloc.init;

    if (bar.respondsToSelector(sel_registerName("bar")))
        bar.bar();
}
struct gnuAbiTag;

Используйте этот атрибут для объявления тега ABI для символа C++.

Тег ABI — это атрибут, введённый компилятором GNU C++. Он модифицирует закодированное имя символа, чтобы включить имя тега, для различения от более ранней версии с другим ABI.

Это специальный атрибут, распознаваемый компилятором. Он имеет несколько требований, которые будут проверяться компилятором:

  • Только один такой атрибут может быть на символ.
  • ,
  • Атрибут может быть прикреплён только к extern(C++) символу (struct, class, enum, функции и их шаблонным аналогам).
  • ,
  • Атрибут не может быть применён к C++ именам пространств. Это сделано для предотвращения путаницы с C++ семантикой, которая позволяет применять его к именам пространств.
  • ,
  • Строковые аргументы должны содержать только допустимые символы для кодирования имен C++, в данный момент это алфавитно-цифровые символы и символ подчёркивания.
  • ,


Этот УДА не является транзитивным, и внутренние области не наследуют тег ABI внешних областей. Примеры перевода объявления C++ в D показаны ниже. Обратите внимание, что записи в этом УДА будут автоматически отсортированы в алфавитном порядке, поэтому gnuAbiTag("c", "b", "a") отобразится как @gnuAbiTag("a", "b", "c").

См. также:
Спецификация ABI Itanium Документация атрибутов GCC.
Примеры:
// ---- foo.cpp
struct [[gnu::abi_tag ("tag1", "tag2")]] Tagged1_2
{
    struct [[gnu::abi_tag ("tag3")]] Tagged3
    {
        [[gnu::abi_tag ("tag4")]]
        int Tagged4 () { return 42; }
    }
}
Tagged1_2 inst1;
// ---- foo.d
@gnuAbiTag("tag1", "tag2") struct Tagged1_2
{
    // Notice the repetition
    @gnuAbiTag("tag1", "tag2", "tag3") struct Tagged3
    {
        @gnuAbiTag("tag1", "tag2", "tag3", "tag4") int Tagged4 ();
    }
}
extern __gshared Tagged1_2 inst1;

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_attribute.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API