c ++ - 堆对象成员函数访问

时间:2016-06-12 02:44:00

标签: mysql pointers constructor queue dynamic-allocation

我不太确定我应该问哪个问题,所以我会去找出错误的位置。

我正在开发一个程序,用于将Interactive Brokers中的tick数据流式传输到MySQL DB中。为了消除因流dl速度和MySQL写入速度之间的差异而可能出现的任何瓶颈,我试图实现一个临时存储Tick对象的队列类。代码:

    TickQueue::TickQueue()
    {
        tickQueue = new std::queue<Tick>;
    }

    TickQueue::~TickQueue()
    {
        delete tickQueue;
    }

    void TickQueue::add(Tick t)
    {
        tickQueue->push(t);
    }

    int main()
    {
        time_t dt = time(0);
        struct tm currTime;
        localtime_s(&currTime, &dt);
        TickQueue tq;

        for (int i = 0; i < 5; ++i) 
        { 
            Tick tTick("fx", 1.2151, "SYM", i, currTime); tq.add(tTick); 
        }

        if (tq.size() == 5) { cout << "success" << endl; }



        return 0;
    }

为了保持持久性,我决定在堆上初始化它。但是,我觉得这可能不是最好的实现。

我也无法访问tq.size(),因为size()不是tq的成员函数。有没有办法构造一个新对象并让它继承其底层结构的成员(在这种情况下为std :: queue)

1 个答案:

答案 0 :(得分:0)

当您声明TickQueue时,您会在其中放置一个成员:

std::queue<Tick> *tickQueue;

也就是说,你说TickQueue'里面有一个'queue<Tick>

相反,请像这样声明TickQueue

class TickQueue : public std::queue<Tick> {
}; // TickQueue

现在你说TickQueue'是一个'queue<Tick>,并且继承了所有方法。