Boost.Signals2 で呼ばれる関数に優先順位を付ける

signal::connect の第一引数に優先順位(デフォルトは int 型)を渡すことで呼び出し順を設定することが出来ます。

[ソース]

#include <boost/signals2/signal.hpp>
#include <boost/lambda/lambda.hpp>
#include <iostream>

int
main(){
    namespace lambda = boost::lambda;
    boost::signals2::signal<void()> sig;
    
    sig.connect(1, std::cout << lambda::var(", World!!\n"));
    sig.connect(std::cout << lambda::var("... and good morning!\n"));
    sig.connect(0, std::cout << lambda::var("Hello"));
    
    sig();
    return 0;
}

[出力]

Hello, World!!
... and good morning!

こんな感じ。
優先順位を渡した方が渡されなかったよりも優先して呼ばれます。

[boost]

  • ver 1.47.0