Класс any: различия между версиями

Материал из docs.kb-agava.ru
Перейти к навигации Перейти к поиску
(Новая страница: «Класс any представляет собой типобезопасный контейнер, который может хранить значения лю...»)
 
Строка 77: Строка 77:
 
  // Присваивание
 
  // Присваивание
 
  any d = a;                      // Копирование
 
  any d = a;                      // Копирование
 +
 +
 +
[[Категория:AgavaSCADA/AgavaPLC]]

Версия 10:04, 26 марта 2026

Класс any представляет собой типобезопасный контейнер, который может хранить значения любого типа - примитивы и объекты.

1 Методы класса

1.1 Конструкторы

  1. any@ f()
    • Создает пустой объект any
    • Не хранит никакого значения
  2. any@ f(?&in) explicit
    • Создает объект any с копией переданного значения
    • Поддерживает любые типы
    • Помечен как explicit для предотвращения неявных преобразований
  3. any@ f(const int64&in) explicit
    • Специализированный конструктор для 64-битных целых чисел
    • Создает объект any с целочисленным значением
  4. any@ f(const double&in) explicit
    • Специализированный конструктор для чисел с плавающей точкой
    • Создает объект any со значением double

1.2 Операторы

  1. any &opAssign(any&in)
    • Оператор присваивания
    • Копирует содержимое другого объекта any
    • Возвращает ссылку на текущий объект

1.3 Методы хранения данных

  1. void store(?&in)
    • Сохраняет значение любого типа в объекте any
    • Для объектов: создает копию
    • Для handle: увеличивает счетчик ссылок
    • Для примитивов: копирует значение
  2. void store(const int64&in)
    • Специализированная версия для 64-битных целых чисел
    • Сохраняет целочисленное значение
  3. void store(const double&in)
    • Специализированная версия для чисел с плавающей точкой
    • Сохраняет значение double

1.4 Методы извлечения данных

  1. bool retrieve(?&out) const
    • Извлекает сохраненное значение в переданную переменную
    • Возвращает true если типы совместимы, иначе false
    • Для handle: проверяет совместимость типов и выполняет приведение
  2. bool retrieve(int64&out) const
    • Специализированная версия для 64-битных целых чисел
    • Позволяет извлечь значение как int64
    • Может выполнять преобразование из double
  3. bool retrieve(double&out) const
    • Специализированная версия для чисел с плавающей точкой
    • Позволяет извлечь значение как double
    • Может выполнять преобразование из int64

2 Примеры использования

// Создание и использование any
any a;                          // Пустой объект
any b = 42;                     // Хранит целое число
any c = 3.14159;                // Хранит double

// Сохранение значений
a.store("Hello");               // Сохранить строку
a.store(123);                   // Сохранить целое число
a.store(45.67);                 // Сохранить double

// Извлечение значений
int64 intValue;
if (b.retrieve(intValue))
    // Успешно извлекли целое число

double doubleValue;
if (c.retrieve(doubleValue))
    // Успешно извлекли double

// Присваивание
any d = a;                      // Копирование