@Gorillych
15 / 15 / 1
Регистрация: 04.07.2013
Сообщений: 76
|
29.07.2013, 19:01
[ТС]
|
|
Если кому интересно - ниже реализация гетерогенного контейнера, наподобие boost::any. Можно обходить элементы контейнера наподобие массивам, но в компайл-тайме:
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| namespace static_iterator
{
template <int... Idx>
struct index { };
template <int N, int... Idx>
struct sequence : sequence<N - 1, N - 1, Idx...> { };
template <int... Idx>
struct sequence<0, Idx...> : index<Idx...> { };
}
struct A {void prnt(){std::cout<<"A\n";} };
struct B {void prnt(){std::cout<<"B\n";} };
struct C {void prnt(){std::cout<<"C\n";} };
template<typename...Arg>
class HeterogenousContainer
{
public:
HeterogenousContainer() :
number_elems(sizeof...(Arg)),
elements(std::make_tuple(Arg()...)){}
std::tuple<Arg...> elements;
template <int... Idx>
void process(static_iterator::index<Idx...>)
{
auto aux = { (std::get<Idx>(elements).prnt(), 0) ... };
}
void process()
{
process(static_iterator::sequence<sizeof...(Arg)>());
}
unsigned int get_number_elements(){return number_elems;}
private:
unsigned int number_elems;
};
int main()
{
HeterogenousContainer<A,B,C,A,A,B,C,B,B,C> obj;
obj.process();
} |
|
1
|