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