如何正确地将 std::vector< std::vector<double> > 转换为 void* 并将其重新解释回来?
How to properly cast std::vector< std::vector<double> > to void* and reinterpret it back?
我不是 C++ 专家,我在将 std::vector< std::vector<double> > my_data
转换为 void *f_data
并重新解释此转换时遇到问题。
基本上我需要转换my_data
:
std::vector<double> point1(2);
point1[0] = 0.06; point1[1] = 2.07;
std::vector<double> point2(2);
point2[0] = 1.01; point2[1] = 0.02;
std::vector< std::vector<double> > my_data;
my_data.push_back(point1);
my_data.push_back(point2);
因此它适合来自 c++ 中 NLopt 包的 opt.set_min_objective(vfunc vf, void *f_data)
函数。
基于 ,我正在尝试以下但它不起作用:
auto *test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
调试时出现以下错误:
this_data=Cannot access memory at address 0x3faeb851eb851eb8
这个我也试过了,但是也不行:
auto test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
任何帮助都会很棒。谢谢!
设置代码为:
opt.set_min_objective(vf, &my_data);
然后在vf函数里面取回指向原来的指针:
static_cast< std::vector<std::vector<double>>* >(f_data)
您可能想使用它来初始化引用:
auto& my_data = *static_cast< std::vector<std::vector<double>>* >(f_data);
可以通过 using
数据类型声明来提高可读性。
我不是 C++ 专家,我在将 std::vector< std::vector<double> > my_data
转换为 void *f_data
并重新解释此转换时遇到问题。
基本上我需要转换my_data
:
std::vector<double> point1(2);
point1[0] = 0.06; point1[1] = 2.07;
std::vector<double> point2(2);
point2[0] = 1.01; point2[1] = 0.02;
std::vector< std::vector<double> > my_data;
my_data.push_back(point1);
my_data.push_back(point2);
因此它适合来自 c++ 中 NLopt 包的 opt.set_min_objective(vfunc vf, void *f_data)
函数。
基于
auto *test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
调试时出现以下错误:
this_data=Cannot access memory at address 0x3faeb851eb851eb8
这个我也试过了,但是也不行:
auto test = static_cast<void*>(my_data.data());
std::vector< std::vector<double> > *this_data = reinterpret_cast<std::vector< std::vector<double> >*>(test);
任何帮助都会很棒。谢谢!
设置代码为:
opt.set_min_objective(vf, &my_data);
然后在vf函数里面取回指向原来的指针:
static_cast< std::vector<std::vector<double>>* >(f_data)
您可能想使用它来初始化引用:
auto& my_data = *static_cast< std::vector<std::vector<double>>* >(f_data);
可以通过 using
数据类型声明来提高可读性。