C++11 のタプルに Python 流の単純なツリーを実装したいと考えています。Python では、type(obj) を使用してランタイム オブジェクト タイプをチェックし、異なるタイプのオブジェクトを 1 つの関数に渡すことができます。
typeid(child1).name() と typeid(tree).name() を出力しようとしましたが、それらは 'St5tupleIIciiEE' と 'St5tupleIIcS_IIciiEES0_EE' です。
私の環境は g++ 4.8.1 です。ありがとう!
// pseudo code
int calc(tuple tree) {
symbol = type(get<0>(tree));
l_child = type(get<1>(tree));
r_child = type(get<2>(tree));
l = (type(l_child) == tuple) ? calc(l_child) : l_child;
r = (type(r_child) == tuple) ? calc(r_child) : r_child;
return l symbol r;
}
int main()
{
auto l_child = make_tuple('*', 1, 2);
auto r_child = make_tuple('-', 5, 1);
auto tree = make_tuple('+', l_child, r_child);
cout << calc(tree) << endl;
}