Как назначить членам объекта структуры?

Вам совсем не нужно DELIMITER $$. Это команда mysql, встроенная в команду . Встроенные клиенты не распознаются парсером SQL.

Вы можете просто выполнить оператор CREATE TRIGGER как единый оператор, и вам не нужно иметь разделитель в конце инструкции. Разделители важны только для интерфейсов, поддерживающих несколько операторов (например, клиент mysql).

phpMyAdmin также разрешает несколько операторов, поэтому вам нужно установить разделитель, но это делается с помощью интерфейса пользовательского интерфейса, а не DELIMITER. См. Процедуры сохранения в phpMyAdmin

3
задан rubenvb 16 January 2019 в 22:40
поделиться

2 ответа

Чтобы изменить 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");
}
0
ответ дан Jason Rice 16 January 2019 в 22:40
поделиться

Я не очень знаком ни с 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 Я не думаю, что это что-то назначает на данный момент, но вы могли бы использовать это и перейти отсюда, но положительным моментом является то, что на том же веб-сайте вы предоставили свой демонстрационный код и с теми же настройками компилятора, это сделало скомпилировать без ошибок. Демонстрация в реальном времени

0
ответ дан Francis Cugler 16 January 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: