小编goa*_*ran的帖子

如何处理使用不同类型索引(size_t、int、...)的不同库(例如 stl 和 eigen3)的混合

我有以下问题。我有一些使用 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 ,但我想知道是否有更好的方法来处理这种情况。我想许多其他“库混合”也会发生这种情况。

c++ eigen3

5
推荐指数
1
解决办法
410
查看次数

ExprTk,获取表达式中的符号/变量列表

我想从 ExprTk 中的表达式中获取符号列表(不是我注册的符号,而是表达式中的符号。例如,当表达式为

const std::string expression_string = "abs(sin(x)^2+5*y)";
Run Code Online (Sandbox Code Playgroud)

我需要将 x 和 y 作为列表/向量或其他内容的结果。我怎样才能做到这一点?

c++ exprtk

4
推荐指数
1
解决办法
724
查看次数

C++ bad_alloc 异常未捕获

我有以下代码来分配大量数据,如果它超过可用内存(这里是 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)

异常永远不会被捕获。应用程序刚刚终止,或者使操作系统崩溃。

我做错了什么?

c++ stdvector bad-alloc

3
推荐指数
1
解决办法
2452
查看次数

忽略c ++调用虚拟基函数

我有一个基类

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没有执行,当我尝试在调试器中进入它时,它不会进入它而只是忽略它.我有点困惑.我的脑子在哪里?

c++

2
推荐指数
1
解决办法
59
查看次数

标签 统计

c++ ×4

bad-alloc ×1

eigen3 ×1

exprtk ×1

stdvector ×1