2

私はこのようなものを持っています:

boost::function<void(void)> redStyle = boost::bind(colorStyle, "red");

boost::function<void(void)> blueBlinkingStyle = boost::bind(animatedStyle, "blue", BLINKING);

これはnullStylerを定義する正しい方法ですか:

void nothing(){}
boost::function<void(void)> noStyle = boost::bind(nothing);

代わりにこの方法でできると思っていましたが、空の関数がスローします:

boost::function<void(void)> noStyle;

スタイラー関数を使用するコードは、「Null オブジェクト パターン」を使用する代わりに空をチェックできます。どちらが良いですか?私の Detail 名前空間に奇妙な何も機能がないか、空をチェックしていますか?

4

1 に答える 1

3

no-op 機能を使用したいと思います。意図が明確になり、ファンクターが空かどうかをチェックする必要がなくなります (他の理由でチェックする必要がない場合)。

bind を呼び出す必要がないことに注意してください。あなたはこれを行うことができます:

boost::function<void(void)> noStyle = nothing;

例:

#include <boost/function.hpp>
#include <iostream>

void hello()
{
  std::cout << "hello" << std::endl;
}

int main()
{
  boost::function<void(void)> f = hello;
  f();
}
于 2013-10-09T09:23:56.923 に答える