codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> struct MyUnion { public: union { bool bool_value; int int_value; float float_value; }; }; template<typename T> T parse(const MyUnion& h) { T t; if (typeid(T) == typeid(bool)) { t = h.bool_value; } else if (typeid(T) == typeid(int)) { t = h.int_value; } else if (typeid(T) == typeid(float)) { // t = h.float_value; // see **Warning** below; use float specialization instead } return t; } // 'float' template specialization to avoid conversion warning. template<> float parse(const MyUnion& h) { return h.float_value; } int main() { MyUnion mu1; mu1.bool_value = true; MyUnion mu2; mu2.int_value = 42; MyUnion mu3; mu3.float_value = 3.14159; std::cout << "As bool: " << parse<bool>(mu1) << std::endl; std::cout << "As int: " << parse<int>(mu2) << std::endl; std::cout << "As float: " << parse<float>(mu3) << std::endl; } // **Warning** // In function 'T parse(const Heterogeneous&) [with T = int]': // Line 22: warning: converting to 'int' from 'const float'
Private
[
?
]
Run code
Submit