Класс any: различия между версиями
Перейти к навигации
Перейти к поиску
| Строка 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 Конструкторы
any@ f()- Создает пустой объект
any - Не хранит никакого значения
- Создает пустой объект
any@ f(?&in) explicit- Создает объект
anyс копией переданного значения - Поддерживает любые типы
- Помечен как
explicitдля предотвращения неявных преобразований
- Создает объект
any@ f(const int64&in) explicit- Специализированный конструктор для 64-битных целых чисел
- Создает объект
anyс целочисленным значением
any@ f(const double&in) explicit- Специализированный конструктор для чисел с плавающей точкой
- Создает объект
anyсо значением double
1.2 Операторы
any &opAssign(any&in)- Оператор присваивания
- Копирует содержимое другого объекта
any - Возвращает ссылку на текущий объект
1.3 Методы хранения данных
void store(?&in)- Сохраняет значение любого типа в объекте
any - Для объектов: создает копию
- Для handle: увеличивает счетчик ссылок
- Для примитивов: копирует значение
- Сохраняет значение любого типа в объекте
void store(const int64&in)- Специализированная версия для 64-битных целых чисел
- Сохраняет целочисленное значение
void store(const double&in)- Специализированная версия для чисел с плавающей точкой
- Сохраняет значение double
1.4 Методы извлечения данных
bool retrieve(?&out) const- Извлекает сохраненное значение в переданную переменную
- Возвращает
trueесли типы совместимы, иначеfalse - Для handle: проверяет совместимость типов и выполняет приведение
bool retrieve(int64&out) const- Специализированная версия для 64-битных целых чисел
- Позволяет извлечь значение как int64
- Может выполнять преобразование из double
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; }
}