Заглянул тут в книжку Вандервурда. Там в главе про Tupple, штука такая есть — val<n>. Удобно конечно, но у меня возникла идея, возможно старая как мир. Но таки приведу её на правах прикола.
#include <string>
#include <iostream>
enum _n_Height { n_Height };
enum _n_Weight { n_Weight };
enum _n_Name { n_Name };
struct Fake_Struct { void operator []( Fake_Struct const& ); };
template < class _Tx, class _Name, class _Super = Fake_Struct >
struct Struct : _Super
{
using _Super::operator[];
_Tx val_;
_Tx& operator []( _Name n ) { return val_; }
Struct() : val_(_Tx()) {}
};
typedef
Struct< int, _n_Height, Struct < float, _n_Weight, Struct < std::string, _n_Name > > >
MyStruct;
int main()
{
MyStruct s;
s[n_Height] = 10;
s[n_Weight] = 20.3;
s[n_Name] = "name";
std::cout
<< s[n_Height] << std::endl
<< s[n_Weight] << std::endl
<< s[n_Name] << std::endl
;
return 0;
}
PS:
Выкриков — 'баян' и тухлых помидоров я не боюсь, ибо действительно прикольно.