Вам совсем не нужно DELIMITER $$
. Это команда mysql, встроенная в команду . Встроенные клиенты не распознаются парсером SQL.
Вы можете просто выполнить оператор CREATE TRIGGER
как единый оператор, и вам не нужно иметь разделитель в конце инструкции. Разделители важны только для интерфейсов, поддерживающих несколько операторов (например, клиент mysql).
phpMyAdmin также разрешает несколько операторов, поэтому вам нужно установить разделитель, но это делается с помощью интерфейса пользовательского интерфейса, а не DELIMITER
. См. Процедуры сохранения в phpMyAdmin
Чтобы изменить Struct
на месте, используйте hana::accessors
, который предоставляет кортеж из hana::pair
с ключом и функцией доступа. Кроме того, поскольку у нас пока нет отражения, вам нужно использовать один из макросов, таких как BOOST_HANA_ADAPT_STRUCT
, чтобы реализовать A
как hana::Struct
.
Другой ответ обращается к лямбде принимает значение r, потому что сжатый кортеж является временным объектом.
#include <cassert>
#include <boost/hana.hpp>
namespace hana = boost::hana;
using namespace hana::literals;
#include <string>
struct A
{
int integer;
std::string string;
};
BOOST_HANA_ADAPT_STRUCT(A, integer, string);
int main()
{
auto tuple = hana::make_tuple(42, "42");
A a;
hana::for_each(
hana::zip(hana::accessors<A>(), tuple),
[&a](auto&& element) {
auto accessor_pair = hana::at_c<0>(element);
auto get_member = hana::second(accessor_pair);
get_member(a) = hana::at_c<1>(element);
});
assert(a.integer == 42 && a.string == "42");
}
Я не очень знаком ни с Boost, ни с Hana; но я зашел на их сайт и прочитал немного их документации по некоторым их объектам, функциям и т. д. Я не знаю, поможет ли это вам, но я смог немного изменить ваш код и получил его для компиляции: [115 ]
int main() {
A a;
auto tuple = hana::make_basic_tuple( 42, "42" );
hana::for_each( hana::zip( hana::members(a), tuple),
[&](auto&& element) {
hana::at( tuple, hana::size_c<0> );
hana::at( tuple, hana::size_c<1> );
}
);
}
Я изменил вашу лямбду на [&]
и изменил параметр на auto&&
, и я использовал hana::at()
. AFAIK Я не думаю, что это что-то назначает на данный момент, но вы могли бы использовать это и перейти отсюда, но положительным моментом является то, что на том же веб-сайте вы предоставили свой демонстрационный код и с теми же настройками компилятора, это сделало скомпилировать без ошибок. Демонстрация в реальном времени