我有一个看起来像这样的复杂对象:

struct A
{
    int a;
}

struct B
{
    int b;
    vector<A> vecA;
}


我目前正在通过以下方式打印出B的向量:

struct PrintStruct
{
    ostream &ostream_;
    PrintStruct(ostream &stream) : ostream_(stream) {}

    void operator()(const A& elementA)
    {
        ostream_ << elementA.a;
    }

    void operator()(const B& elementB)
    {
        ostream_ << elementB.b;
        for_each(elementB.vecA.begin(), elementB.vecA.end(), (*this));
    }
}

void print()
{
    vector<B> vecB;
    for_each(vecB.begin(), vecB.end(), PrintStruct(cout));
}


那一定是最好的方法吗?我主要担心的是在函子本身的(*this)中调用for_each。这样安全吗?我认为应该这样,但是我不确定是否会有意想不到的后果?

最佳答案

我主要担心的是在函子本身的(*this)中调用for_each。这样安全吗?


通常无法回答,但就您而言,这是安全的。

for_each的调用将复制PrintStruct对象并使用它。副本的ostream_成员将引用与原始ostream_PrintStruct成员相同的对象。它应该没有问题。

10-07 12:30