CDT  v4.2.0
инструменты разработчика

◆ emplace()

template<name::raw TableName, typename T , typename... Indices>
template<typename Lambda >
const_iterator eosio::multi_index< TableName, T, Indices >::emplace ( name  payer,
Lambda &&  constructor 
)
inline

Добавляет в таблицу новый объект (строку).

Аргументы
payer— имя аккаунта-плательщика за хранение нового объекта
constructor— лямбда для инициализации создаваемого объекта на месте
Предусловие
создан экземпляр многоиндексной таблицы
Постусловие
В многоиндексной таблице создан новый объект с уникальным первичным ключом (как в объекте). Объект сериализуется и записывается; при отсутствии таблицы она создаётся.
Вторичные индексы обновлены для нового объекта; при отсутствии таблиц вторичных индексов они создаются.
С плательщика взимается хранение нового объекта и при необходимости создания таблицы (и вторичных индексов) — накладные расходы.
Возвращает
Итератор по первичному ключу на созданный объект

Исключение — аккаунт не уполномочен записывать в таблицу.

Пример:

// This assumes the code from the constructor example. Replace myaction() {...}
void myaction() {
address_index addresses(_self, _self.value); // code, scope
// add to table, first argument is account to bill for storage
addresses.emplace(_self, [&](auto& address) {
address.account_name = "dan"_n;
address.first_name = "Daniel";
address.last_name = "Larimer";
address.street = "1 EOS Way";
address.city = "Blacksburg";
address.state = "VA";
});
}
}
EOSIO_DISPATCH( addressbook, (myaction) )

См. определение в файле multi_index.hpp строка 1572