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

◆ multi_index()

template<name::raw TableName, typename T , typename... Indices>
eosio::multi_index< TableName, T, Indices >::multi_index ( name  code,
uint64_t  scope 
)
inline

load_object_by_primary_iterator

Создаёт экземпляр многоиндексной таблицы.

Аргументы
code— аккаунт-владелец таблицы
scope— идентификатор области (scope) в иерархии кода
Предусловие
свойства code и scope заданы
Постусловие
каждая таблица вторичного индекса инициализирована
Вторичные индексы обновлены для ссылки на новый объект; при отсутствии таблиц вторичных индексов они создаются.
С плательщика взимается хранение нового объекта и, при необходимости создания таблицы (и таблиц вторичных индексов), накладные расходы на создание.

Замечания Шаблон eosio::multi_index имеет параметры <name::raw TableName, typename T, typename... Indices>, где:

  • TableName — имя таблицы, не более 12 символов из набора строчных букв, цифр 1–5 и «.»; преобразуется в eosio::raw (обёртка над uint64_t);
  • T — тип объекта (определение строки);
  • Indices — список до 16 вторичных индексов.
  • Каждый элемент должен быть классом или структурой с конструктором по умолчанию
  • У каждого должен быть оператор вызова, принимающий const-ссылку на тип объекта строки и возвращающий вторичный ключ или ссылку на него
  • Рекомендуется шаблон eosio::const_mem_fun

Пример:

#include <eosiolib/eosio.hpp>
using namespace eosio;
using namespace std;
class addressbook: contract {
struct address {
uint64_t account_name;
string first_name;
string last_name;
string street;
string city;
string state;
uint64_t primary_key() const { return account_name; }
};
public:
addressbook(name self):contract(self) {}
typedef eosio::multi_index< "address"_n, address > address_index;
void myaction() {
address_index addresses(_self, _self.value); // code, scope
}
}
EOSIO_DISPATCH( addressbook, (myaction) )

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