1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

boost c++ setWert von boost::variant< ..

Dieses Thema im Forum "Coders Talk" wurde erstellt von jkallup, 12. August 2016.

  1. jkallup

    jkallup Erfahrenes Mitglied

    Hallo,

    wie kann ich mittels boost einen get auch ein set wert zuweisen?
    also nicht nur get: wert = boost::get<int>(expr);
    sondern setWert(12);

    ???
    Danke
    jkallup

    Code (Text):
    1. struct expression_ast
    2.     {
    3.         typedef
    4.             boost::variant<
    5.                   nil
    6.                 , int
    7.                 , double
    8.                 , dBaseTypes
    9.                 , std::string
    10.                 , boost::recursive_wrapper<expression_ast>
    11.                 , boost::recursive_wrapper<binary_op>
    12.                 , boost::recursive_wrapper<unary_op>
    13.                 , boost::recursive_wrapper<class_op>
    14.                 , boost::recursive_wrapper<dBaseExpression>
    15.             >
    16.         type;
    17.         type expr;
    18. ...
    19. };
    20.  
    21.  
    22.  
    23.  
    24. expression_ast lexp = left;
    25. if (boost::get<int>(lexp.expr) < boost::get<int>(right.expr))
    26. lexp.expr = value_int;
    27. left = lexp;
    28.  
    29.  
    30.  
    31.  
    32.  
    33.  
    34.  
    35.  
    36.     struct binary_op
    37.     {
    38.         binary_op(
    39.               char op
    40.             , expression_ast const& left
    41.             , expression_ast const& right)
    42.             : op(op)
    43.             , left(left)
    44.             , right(right)
    45.         {
    46.             int lval,rval, value_int;
    47.  
    48.  
    49.             cout << "11111111111111111\n";
    50.  
    51.  
    52.             try {
    53.                 lval = boost::get<double>(left.expr);
    54.             }   catch (...) {
    55.                 try {
    56.                     lval = boost::get<int>   (left.expr);
    57.                 }   catch (...) {
    58.                 }
    59.             }
    60.  
    61.  
    62.             cout << "122222222222222222222222222222222\n";
    63.  
    64.  
    65.             try {
    66.                 rval = boost::get<double>(right.expr);
    67.             }   catch (...) {
    68.                 rval = boost::get<int>   (right.expr);
    69.             }
    70.  
    71.  
    72.             cout << "AAAAAAAAAAAAAAAAAAAAAAA\n";
    73.  
    74.  
    75.             if (op == '+') value_int = lval + rval; else
    76.             if (op == '-') value_int = lval - rval; else
    77.             if (op == '*') value_int = lval * rval; else
    78.             if (op == '/') value_int = lval / rval;
    79.  
    80.  
    81.             cout << "ER: " << value_int << endl;
    82.             try {
    83.                 expression_ast lexp = left;
    84.                 if (boost::get<int>(lexp.expr) < boost::get<int>(right.expr))
    85.                 lexp.expr = value_int;
    86.                 left = lexp;
    87.                 cout << "SSSSSSSSSSSSSS\n";
    88.             }   catch (...) {
    89.                 try {
    90.                     expression_ast lexp = left;
    91.                     if (boost::get<double>(lexp.expr) < boost::get<double>(right.expr))
    92.                     lexp.expr = double(value_int);
    93.                 }   catch (...) {
    94.  
    95.  
    96.                 }
    97.             }
    98.  
    99.  
    100.             cout << "DDDDDDDDDDDDDD\n";
    101.             /*
    102.             if (flag == 1)  {
    103.                 if (value_int > boost::get<double>(right.expr))
    104.                 right.expr = value_int;
    105.             }   else {
    106.                 if (value_int > boost::get<int>(right.expr))
    107.                 right.expr = value_int;
    108.             }
    109. */
    110.             std::cout << "Math2: " << value_int << std::endl;
    111.         }
    112.  
    113.  
    114.         char op;
    115.         expression_ast left;
    116.         expression_ast right;
    117.     };