你必须告诉我
yaml-cpp
如何解析此类型。由于C++不是动态类型化的,它不能检测你想要的数据类型并从头开始创建它——你必须直接告诉它。标记节点实际上只针对您自己,而不是解析器(它只会忠实地为您存储它)。
我不确定OpenCV矩阵是如何存储的,但如果是这样的:
class Matrix {
public:
Matrix(unsigned r, unsigned c, const std::vector<float>& d): rows(r), cols(c), data(d) { /* init */ }
Matrix(const Matrix&) { /* copy */ }
~Matrix() { /* delete */ }
Matrix& operator = (const Matrix&) { /* assign */ }
private:
unsigned rows, cols;
std::vector<float> data;
};
然后你可以写一些
void operator >> (const YAML::Node& node, Matrix& matrix) {
unsigned rows, cols;
std::vector<float> data;
node["rows"] >> rows;
node["cols"] >> cols;
node["data"] >> data;
matrix = Matrix(rows, cols, data);
}
编辑
看来你在这之前都没事;但是您缺少解析器将信息加载到
YAML::Node
. 取而代之的是:
std::ifstream fin("monsters.yaml");
YAML::Parser parser(fin);
YAML::Node doc;
parser.GetNextDocument(doc); // <-- this line was missing!
Matrix m;
doc["tableCenter"] >> m;
注:我猜
dt: f
表示“数据类型为浮点型”。如果真是这样,那就要看
Matrix
第一
,然后选择要实例化的类型(如果你