友人の関数定義とstd :: lockの代替ブースト機能

class some_big_object;
bool operator<(some_big_object& lhs,some_big_object& rhs);

class X
{
private:
    some_big_object some_detail;
    mutable std::mutex m;
public:
    X(some_big_object const& sd):some_detail(sd){}
    friend bool operator<(X const& lhs, X const& rhs)                   #1
    {
        if(&lhs == &rhs)
            return false;
        std::lock(lhs.m,rhs.m);                                     #2
        std::lock_guard lock_a(lhs.m,std::adopt_lock); 
        std::lock_guard lock_b(rhs.m,std::adopt_lock); 
        return lhs.some_detail

Question 1> This is the first time I ever see a friend function is defined inside the scope of class. Is it legal?

Question 2> what is the alternative boost function for std::lock?

私は以下の使用法を見てきました:

boost::unique_lock l1(m1);
boost::unique_lock l2(m2,boost::try_to_lock);
if(!l2)
{
    return 1;
}
1
最初の質問はすでに答えられているので、SOを検索してください。
追加された 著者 Xeo,

2 答え

boost::mutex m;
boost::lock(m); //or unlock
m.lock(); //or unlock again
boost::lock_guard lock(m);

ブースト構文でなければなりません。 私が知っているように、boost :: mutexとstd :: mutexはほぼ同じです:)

1
追加された

おそらくもう少し遅いかもしれませんが、 boost にはまったく同じ機能があります(標準のものはおそらくそこから来たものでしょう)。彼らはまだvariadicではありません。

それらを見つけることができます。こちらをご覧ください。

boost::lock(lhs.m,rhs.m);
boost::lock_guard lock_a(lhs.m,boost::adopt_lock); 
boost::lock_guard lock_b(rhs.m,boost::adopt_lock); 
0
追加された