Класс any: различия между версиями
Перейти к навигации
Перейти к поиску
| (не показаны 4 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
Класс any представляет собой типобезопасный контейнер, который может хранить значения любого типа - примитивы и объекты. | Класс any представляет собой типобезопасный контейнер, который может хранить значения любого типа - примитивы и объекты. | ||
| + | |||
| + | При работе с объектами выполняется их "глубокое" копирование. | ||
| + | |||
| + | Класс доступен в версии <code>AS 1.6.33+</code> | ||
=== Методы класса === | === Методы класса === | ||
| Строка 56: | Строка 60: | ||
=== Примеры использования === | === Примеры использования === | ||
| − | // Создание и использование any | + | 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; // Копирование | |
| − | |||
| − | + | // Пример с объектом | |
| − | any | + | |
| − | + | MyClass@ obj = MyClass(42); | |
| − | + | ||
| + | any@ e = any(obj); // Сохраняем объект | ||
| + | MyClass@ retrieved; | ||
| + | |||
| + | if (e.retrieve(@retrieved)) | ||
| + | { | ||
| + | |||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | class MyClass | ||
| + | { | ||
| + | int value; | ||
| + | MyClass() {}; | ||
| + | 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; }
}