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

Материал из docs.kb-agava.ru
Перейти к навигации Перейти к поиску
 
Строка 64: Строка 64:
 
  // Создание и использование any
 
  // Создание и использование any
 
  any a;                          // Пустой объект
 
  any a;                          // Пустой объект
  any b = any(42);               // Хранит целое число
+
  any@ b = any(42);               // Хранит целое число
 
  any c = any(3.14159);          // Хранит double
 
  any c = any(3.14159);          // Хранит double
 
   
 
   
Строка 112: Строка 112:
 
     MyClass(int v) { value = v; }
 
     MyClass(int v) { value = v; }
 
  }  
 
  }  
+
 
 
[[Категория:AgavaSCADA/AgavaPLC]]
 
[[Категория:AgavaSCADA/AgavaPLC]]

Текущая версия на 11:03, 26 марта 2026

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

При работе с объектами выполняется их "глубокое" копирование.

Класс доступен в версии AS 1.6.33+

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 Примеры использования

void FunctionCpp()
{
	// Создание и использование any
	any a;                          // Пустой объект
	any@ b = any(42);               // Хранит целое число
	any c = any(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;                      // Копирование

	// Пример с объектом

	MyClass@ obj = MyClass(42);

	any@ e = any(obj);              // Сохраняем объект
	MyClass@ retrieved;

	if (e.retrieve(@retrieved))
	{


	}
}

class MyClass 
{
    int value;
    MyClass() {};
    MyClass(int v) { value = v; }
}