以下のコードがあります。このTest
関数は、パラメーターとしてスロットを受け入れるかどうかを指定できます。boost::signal2
ライブラリのみを使用して同じことを達成する方法はありますか?
#include <boost/signals2.hpp>
#include <boost/optional.hpp>
#include <string>
#include <iostream>
typedef boost::signals2::signal<std::string (void)> CSignal;
typedef CSignal::slot_type CSlotType;
typedef boost::optional<CSlotType> COptSlotType;
void Test(const COptSlotType &optSlot = COptSlotType()) {
std::string str;
if (optSlot) {
CSignal sig;
sig.connect(*optSlot);
const auto rt = sig();
if (rt) {
str = *rt;
}
}
else {
str = "No Slot";
}
std::cout << str << std::endl;
}
std::string TestSignal(void) {
return "Signal";
}
int main(int argc, char *argv[]) {
Test();
Test(COptSlotType(&TestSignal));
return 0;
}