#include <iostream>
#include <functional>
#include <string>
template < typename T, template < class > class binary_func>
void processTwoVal( std:: string const & text,
std:: string const & op)
{
T val1, val2;
std:: cout << "Geben Sie " << text << " ein: " ;
std:: cin >> val1;
std:: cout << "Geben Sie noch " << text << " ein: " ;
std:: cin >> val2;
std:: cout << val1 << ' ' << op << ' ' << val2 << " = " << binary_func< T> ( ) ( val1, val2) << "\n \n " ;
}
int main( )
{
std:: cout << std:: boolalpha ;
processTwoVal< int , std:: plus > ( "eine ganzzahlige Variable" , "+" ) ;
processTwoVal< float , std:: minus > ( "eine Gleitpunktzahl" , "-" ) ;
processTwoVal< bool , std:: logical_and > ( "einmal 1(wahr) oder 0(falsch)" , "&&" ) ;
processTwoVal< char , std:: not_equal_to > ( "ein Zeichen" , "!=" ) ;
processTwoVal< std:: string , std:: less > ( "eine Zeichenkette" , "<" ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IAojaW5jbHVkZSA8c3RyaW5nPiAKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHRlbXBsYXRlIDxjbGFzcz4gY2xhc3MgYmluYXJ5X2Z1bmM+IAp2b2lkIHByb2Nlc3NUd29WYWwoc3RkOjpzdHJpbmcgY29uc3QmIHRleHQsIAogICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgb3ApIAp7IAogICAgICAgIFQgdmFsMSwgdmFsMjsgCiAgICAgICAgc3RkOjpjb3V0IDw8ICJHZWJlbiBTaWUgIiA8PCB0ZXh0IDw8ICIgZWluOiAiOyAKICAgICAgICBzdGQ6OmNpbiA+PiB2YWwxOyAKICAgICAgICBzdGQ6OmNvdXQgPDwgIkdlYmVuIFNpZSBub2NoICIgPDwgdGV4dCA8PCAiIGVpbjogIjsgCiAgICAgICAgc3RkOjpjaW4gPj4gdmFsMjsgCgogICAgICAgIHN0ZDo6Y291dCA8PCB2YWwxIDw8ICcgJyA8PCBvcCA8PCAnICcgPDwgdmFsMiA8PCAiID0gIiA8PCBiaW5hcnlfZnVuYzxUPigpKHZhbDEsIHZhbDIpIDw8ICJcblxuIjsgCn0gCgppbnQgbWFpbigpIAp7IAogICAgc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhOyAKCiAgICBwcm9jZXNzVHdvVmFsPGludCwgc3RkOjpwbHVzPigiZWluZSBnYW56emFobGlnZSBWYXJpYWJsZSIsICIrIik7IAoKICAgIHByb2Nlc3NUd29WYWw8ZmxvYXQsIHN0ZDo6bWludXM+KCJlaW5lIEdsZWl0cHVua3R6YWhsIiwgIi0iKTsgCgogICAgcHJvY2Vzc1R3b1ZhbDxib29sLCBzdGQ6OmxvZ2ljYWxfYW5kPigiZWlubWFsIDEod2Focikgb2RlciAwKGZhbHNjaCkiLCAiJiYiKTsgCgogICAgcHJvY2Vzc1R3b1ZhbDxjaGFyLCBzdGQ6Om5vdF9lcXVhbF90bz4oImVpbiBaZWljaGVuIiwgIiE9Iik7IAoKICAgIHByb2Nlc3NUd29WYWw8c3RkOjpzdHJpbmcsIHN0ZDo6bGVzcz4oImVpbmUgWmVpY2hlbmtldHRlIiwgIjwiKTsgCn0=