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

Материал из docs.kb-agava.ru
Перейти к навигации Перейти к поиску
Строка 2: Строка 2:
  
 
При работе с объектами выполняется их "глубокое" копирование.
 
При работе с объектами выполняется их "глубокое" копирование.
 +
 +
Класс доступен в версии <code>AS 1.6.33+</code>
  
 
=== Методы класса ===
 
=== Методы класса ===

Версия 11:02, 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; }
}