我有以下问题。我有一些使用 Eigen3 的代码。Eigen3 使用 int 或 long int 作为索引。在代码中的某些地方,我必须将特征数组中的值存储在std::vector
.
这是一些例子:
std::vector myStdVector;
Eigen::VectorXd myEigen;
....
for(size_t i=0; i<myStdVector.size(); i++)
{
myStdVector[i] = myEigen(i);
}
Run Code Online (Sandbox Code Playgroud)
这里我得到编译器警告:
警告:隐式转换会丢失整数精度:“const size_t”(又名“const unsigned long”)到“int”
所以我当然可以static_cast<int>(i)
在发生这种情况的所有函数中添加 a ,但我想知道是否有更好的方法来处理这种情况。我想许多其他“库混合”也会发生这种情况。
我想从 ExprTk 中的表达式中获取符号列表(不是我注册的符号,而是表达式中的符号。例如,当表达式为
const std::string expression_string = "abs(sin(x)^2+5*y)";
Run Code Online (Sandbox Code Playgroud)
我需要将 x 和 y 作为列表/向量或其他内容的结果。我怎样才能做到这一点?
我有以下代码来分配大量数据,如果它超过可用内存(这里是 32GB),它应该抛出异常。使用:
bool MyObject::init()
{
char* emergency_memory = new char[32768];
try
{
std::vector<std::vector<MyData> > data_list;
std::vector<MyData> data;
data.resize(1000);
for(size_t i=0; i<1000; i++)
{
data_list.push_back(data);
data_list.push_back(data);
}
}
catch (const std::bad_alloc& e)
{
delete[] emergency_memory;
std::cout << "Data Allocation failed:" << e.what() << std::endl;
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
异常永远不会被捕获。应用程序刚刚终止,或者使操作系统崩溃。
我做错了什么?
我有一个基类
class DLL_IMPORTEXPORT Base
{
public:
explicit Base(Base *parentItem = NULL);
virtual ~Base();
virtual bool initFromXml(const pugi::xml_node &xml_node);
//....
};
Run Code Online (Sandbox Code Playgroud)
以及派生类
class DLL_IMPORTEXPORT Derived : public Base
{
public:
Derived(Base *parentItem = 0);
~Derived();
bool initFromXml(const pugi::xml_node &xml_node);
//...
};
Run Code Online (Sandbox Code Playgroud)
现在我想调用基类方法
virtual bool initFromXml(const pugi::xml_node &xml_node);
Run Code Online (Sandbox Code Playgroud)
从派生类方法
bool Derived::initFromXml(const pugi::xml_node &xml_node)
{
bool all_ok = false;
// .... do some specific things
// then run the base class method
all_ok = all_ok && Base::initFromXml(xml_node);
return all_ok;
}
Run Code Online (Sandbox Code Playgroud)
这一切都编译得很好,但是,当我执行代码时,基类methode没有执行,当我尝试在调试器中进入它时,它不会进入它而只是忽略它.我有点困惑.我的脑子在哪里?