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

Материал из docs.kb-agava.ru
Перейти к навигации Перейти к поиску
(Новая страница: «Класс any представляет собой типобезопасный контейнер, который может хранить значения лю...»)
 
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
Класс any представляет собой типобезопасный контейнер, который может хранить значения любого типа - примитивы и объекты.
 
Класс any представляет собой типобезопасный контейнер, который может хранить значения любого типа - примитивы и объекты.
 +
 +
При работе с объектами выполняется их "глубокое" копирование.
 +
 +
Класс доступен в версии <code>AS 1.6.33+</code>
  
 
=== Методы класса ===
 
=== Методы класса ===
Строка 56: Строка 60:
  
 
=== Примеры использования ===
 
=== Примеры использования ===
  // Создание и использование any
+
  void FunctionCpp()
any a;                          // Пустой объект
+
{
any b = 42;                     // Хранит целое число
+
// Создание и использование any
any c = 3.14159;               // Хранит double
+
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))
a.store("Hello");              // Сохранить строку
+
{
a.store(123);                  // Сохранить целое число
 
a.store(45.67);                // Сохранить double
 
 
   
 
   
// Извлечение значений
 
int64 intValue;
 
if (b.retrieve(intValue))
 
    // Успешно извлекли целое число
 
 
   
 
   
double doubleValue;
+
}
  if (c.retrieve(doubleValue))
+
  }
    // Успешно извлекли double
 
 
   
 
   
  // Присваивание
+
  class MyClass
  any d = a;                     // Копирование
+
  {
 +
    int value;
 +
    MyClass() {};
 +
    MyClass(int v) { value = v; }
 +
}
 +
 
 +
[[Категория: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; }
}