Мультииндексная таблица С++ — API сохранения eos

Фрагмент кода для этого вопроса взят из раздела Persistance API документации WIKI для EOS. Ссылка на эту страницу здесь...

https://github.com/EOSIO/eos/wiki/Persistence-API

В следующем фрагменте кода похоже, что шаблон класса (или класс шаблона) определяется как service_table_type. Далее в угловых скобках шаблона класса передается целая куча кастомных типов и вроде бы ничего нового кроме сложности (если я правильно понял) там нет.

using service_table_type = multi_index<service, service_rec,
indexed_by< N(bycustomer), const_mem_fun<service_rec, account_name, 
&service_rec::get_customer>>>;

Мой вопрос касается приведенной ниже строки кода, которая следует за приведенным выше фрагментом кода. что происходит здесь? это похоже на вызов функции service_table(), которая возвращает параметр типа service_table_type. Откуда взялась эта функция? Если бы эта функция пришла из библиотеки, как бы она вернула значение типа service_table_type, которое мы произвольно создали?

service_table_type service_table( current_receiver(), mechanic );

Не могли бы вы предоставить мне урезанный пример общего кода того, что здесь происходит?

Спасибо любезно!


person kamiss    schedule 20.06.2018    source источник


Ответы (1)


Вы вызываете конструктор класса multi_index. service_table это имя переменной

person pure cuteness    schedule 20.06.2018
comment
Спасибо за ответ. Чтобы проверить свое понимание, я написал тестовый класс, который, насколько я понимаю, имитирует то, что происходит в приведенном выше коде. Мой код работает так, как есть, но когда я включаю закомментированные строки, он не работает. (здесь я предполагаю, что закомментированные строки аналогичны: using service_table_type = multi_index‹service, service, .... и service_table_type service_table(current_receiver(), mechanic); соответственно. - person kamiss; 20.06.2018
comment
Извините, время моего редактирования истекло, поэтому я не смог правильно структурировать вышеуказанный вопрос. Вот код, который работает как есть. закомментированный раздел не работает. что я не делаю, что делает пример выше? шаблон‹класс T› класс Test{ private: T x; public: Test‹T›(T templateVar){std::cout‹‹templateVar;} void setVar(T v) {x=v;} T getX() const {return x;} }; int main() { // использование xxx = Test‹float›; //xxx объект(25.003); Тест‹float› obj(25.003); вернуть 0; }` - person kamiss; 20.06.2018
comment
Что ты имеешь в виду под этим не работает? Не компилируется? Убедитесь, что вы включили C++11. В качестве альтернативы вы можете изменить using xxx = Test<float> на typedef Test<float> xxx; - person pure cuteness; 20.06.2018