C++YAML読み書きの概要
2298 ワード
1.yaml-cppインストールyaml-cppオープンソースライブラリ、githubアドレス、CMakeによるコンパイル構築手順:
ubuntu16.04インストールyaml:
2. read yaml
test.yaml:
3. write yaml
yaml結果:
mkdir build // build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
// CMakeLists.txt, build
make
sudo make install
ubuntu16.04インストールyaml:
sudo apt-get install libyaml-cpp-dev
私のは他のパッケージをインストールするときに依存しているはずなのでインストールしました.ディレクトリは/usr/include/yaml-cpp
で、*.h形式が存在する.2. read yaml
#ifdef HAVE_NEW_YAMLCPP
// The >> operator disappeared in yaml-cpp 0.5, so this function is
// added to provide support for code written under the yaml-cpp 0.3 API.
template
void operator >> (const YAML::Node& node, T& i)
{
i = node.as();
}
#endif
void loadYamlFile(std::string name){
YAML::Node node = YAML::LoadFile(name);
std::string test_param2;
node["marker_name"] >> test_param2;
std::cout << test_param2 << std::endl;
}
// CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall")
add_definitions(-std=c++11)
INCLUDE(FindPkgConfig)
pkg_check_modules(NEW_YAMLCPP yaml-cpp>=0.5)
if(NEW_YAMLCPP_FOUND)
add_definitions(-DHAVE_NEW_YAMLCPP)
endif(NEW_YAMLCPP_FOUND)
test.yaml:
marker_name: t_1
ダイレクトコールloadYamlFile(marker_file);
、プリントtest_param 2結果t_1
.3. write yaml
std::ofstream out(marker_file, std::ios::app);
std::string marker_name = "t_" + std::to_string(cnt);
std::cout << "marker_name :" << marker_name << std::endl;
Emitter node;
node << BeginMap;
node << Key << "marker_name" << Value << marker_name;
node << Key << "pose" << Value << msg->pose;
node << Key << "---";
node << EndMap;
out << node.c_str();
out << '
';
out.close();
cnt++;
std::cout << "------------------" << std::endl;
yaml結果:
marker_name: t_1
pose:
position: [-0.107327938079834, 0.3301165103912354, 0]
orientation: [0, 0, 0.642, 0.766]
---
marker_name: t_2
pose:
position: [-1.01, -0.475, 0]
orientation: [0, 0, 0.868, -0.497]
---