如何使用C++實現一個and函數?

就是函數編程裡面常見的and,大概是這麼一件事:

auto and(Fn1 fn1, Fn2 fn2)

{

return [fn1, fn2](...)

{

return fn1(...) fn2(...);

};

}

參數部分實在不知道怎麼搞。


輪子叔的寫法已經過時了(逃

C++17都來了,我們應該積極跟進標準(逃

constexpr auto And = [](auto l, auto r) {
return [l = std::forward&(l),
r = std::forward&(r)](auto... args) {
return l(args...) r(args...);
};
};

隨手一寫,如果錯了歡迎打臉

(想了一下,這麼寫的確有點問題,看看誰能發現(已經改對了,現在的寫法是完美的


template&
auto And(function& a, function& b)
{
return [=](TArgs ...args)
{
return a(args...) b(args...);
};
}

bool Fuck(int a, int b, string c)
{
return a &<= b; } bool Shit(int a, int b, string c) { return a &>= b;
}

int main(void)
{
auto x = And&(Fuck, Shit);
cout &<&< x(1, 1, "fuck") &<&< "," &<&< x(1, 2, "shit") &<&< "," &<&< x(2, 1, "bitch") &<&< endl; return 0; }


auto and(Fn1 fn1, Fn2 fn2)
{
return [fn1, fn2](auto... args)
{
return fn1(args...) fn2(args...);
};
}

雖然必須換個函數名,and 是不能作為函數名的


雖然我學過erlang,但是並沒有看懂這個and函數···我好羞愧


推薦閱讀:

如何在 C++ 代碼中提示編譯器某個分支的執行概率高?
C++ 函數如何返回多值?
程序員有哪些借口可以讓自己寫的代碼里到處都是Bug並且代碼可讀性很低?
如何在 Visual Studio 上用 C/C++ 寫 Linux 程序?

TAG:編程語言 | 編程 | C | 函數式編程 |