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

Материал из docs.kb-agava.ru
Перейти к навигации Перейти к поиску
Строка 56: Строка 56:
  
 
=== Примеры использования ===
 
=== Примеры использования ===
  // Создание и использование 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("Hello");              // Сохранить строку
a.store(123);                  // Сохранить целое число
+
a.store(123);                  // Сохранить целое число
a.store(45.67);                // Сохранить double
+
a.store(45.67);                // Сохранить double
 
   
 
   
// Извлечение значений
+
// Извлечение значений
int64 intValue;
+
int64 intValue;
if (b.retrieve(intValue))
 
    // Успешно извлекли целое число
 
 
   
 
   
  double doubleValue;
+
if (b.retrieve(intValue))
  if (c.retrieve(doubleValue))
+
// Успешно извлекли целое число
    // Успешно извлекли double
+
{
 +
 +
}
 +
   
 +
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; }
 +
}
 
   
 
   
// Присваивание
 
any d = a;                      // Копирование
 
  
  
 
[[Категория:AgavaSCADA/AgavaPLC]]
 
[[Категория:AgavaSCADA/AgavaPLC]]

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

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; }
}