2017-09-01 9 views
0

私は、条件付きで単純な関数を持っていれば、何かを返します。関数の引数として渡されたときに評価される前に、式の内容を取得することは可能ですか?

例えば:

bool is_even(int num){ 
    return (num % 2 == 0); 
} 
void Foo(conditional) 
{ 
    if(conditional) 
     std::cout << "Bar" << std::endl; 
} 

それは引数またはそれが機能して評価だ前に、条件に入った全体としての表現を取得することはできますか?

条件式がis_even(2)の場合、true値(True)ではなく、評価する前に式is_even(2)を取得できますか?

struct Bar 
{ 
    bool operator()() const; 
}; 

とあなたが、その後Barにどのような状態をカプセル化することができます

template <typename Y> 
void Foo(const Y& y) 
{ 
    if(y()){ 
     std::cout << "Bar" << std::endl; 
    } 
} 

を書く:

+0

CまたはC++でプログラミングしていますか? – Bathsheba

+2

No. BTW、 'return num%2 == 0;' – juanchopanza

+0

@Bathsheba私はそれをC++にクリアしました、残念です。私はこれを取り込む可能性のある方法であるCスタイルのマクロのためにC言語のみを含んでいました。 – Fields

答えて

6

一つの方法は、bool()演算子をオーバーロードするクラスを使用することです。あなたが評価のポイントにy()を記述する必要があるという事実が気に入らない場合は、代わりにboolから変換オペレータ定義することで、更なる構文を微調整することもできます

struct Bar 
{ 
    operator bool() const; 
}; 

をして

template <typename Y> 
void Foo(const Y& y) 
{ 
    if (y){ 
     std::cout << "Bar" << std::endl; 
    } 
} 
を書きます

これを実行すると、アクターと、そのすばらしいC++エンジニアリングBoost Spiritの基盤がつまずいています。 https://en.wikipedia.org/wiki/Actor_modelおよびhttps://theboostcpplibraries.com/boost.spirit

関連する問題