Я относительно новичок в C ++ (у меня есть опыт в C и встроенном C), некоторые концепции C ++ все еще трудно обернуть.
Я пытаюсь скопировать массив надстройки из обратного вызова ROS. Для тех, кто не знаком с ROS, обратный вызов в моей программе (узле) передает ссылку на объект из системы обмена сообщениями ROS.
Объявление обратного вызова: void callback(const boost::shared_ptr<std_msgs::uint8_t>&);
Допустим, у меня есть две ссылки, которые я хочу скопировать из обратного вызова: одну из bool foo
и другую boost::array<uint8_t, 8UL> bar
.
Теперь я могу скопировать тип bool:
bool x;
void callback(const boost::shared_ptr<std_msgs::uint8_t>& msg) {
x = msg->foo;
}
Это отлично работает, копирует значение в другую переменную до разрушения объекта.
Теперь я совсем не знаком с Boost. Открытая конструкция / копирование / уничтожение массива Boost: (1011 * ссылка ):
template<typename U> array& operator=(const array<U, N>& other);
Effects:
std::copy(rhs.begin(),rhs.end(), begin())
Вот как я пытаюсь скопировать bar
переменную:
boost::array<uint8_t, 8UL> y;
void callback(const boost::shared_ptr<std_msgs::uint8_t>& msg) {
std::copy(msg->bar.begin(), msg->bar.end() + 8, y.begin());
}
Это снова работает нормально, однако это правильный способ сделать это? Насколько я знаю, std::copy
функция использует итераторы, я не совсем понимаю, как это работает (и если это правильно). Я знаком с memcpy()
, могу ли я использовать это вместо этого, и если да, какие будут преимущества?
РЕДАКТИРОВАТЬ: Кроме того, если я сделал что-то вроде этого:
boost::array<uint8_t, 8UL> y;
void callback(const boost::shared_ptr<std_msgs::uint8_t>& msg) {
y = msg->bar;
}
Будет ли это скопировано или указано?