3
にテンプレートメンバ関数を渡すiは整数Nで鋳型タイプのセット、及びN < = KおよびN、すべてのタイプ> = 0を格納するクラス、テンプレート
template <int N> struct T { int i; }
template <int N> struct TContainer{
std::vector<T<N>> vec;
TContainer<N - 1> prev;
template <int target_n> TContainer<target_n> & get() { return prev.get(); }
template <> TContainer<N> & get<N>() { return *this; }
};
template <> struct TContainer<0>{
std::vector<T<N>> vec;
template <int target_n> TContainer<target_n> & get() { }
template <> TContainer<0> & get<0>() { return *this; }
};
class ContainsAll{
TContainer<K> my_data;
int my_instance_data;
};
ようなものがあります
ContainsAllはforeach関数をいくつか持つことができます。これはテンプレートメンバー関数を使ってすべてのNに対して各要素を処理することができますか?
template<int N>
void for_each(TContainer<N> & container, template_function){
for(auto it = container.vec.begin(); it != container.vec.end(); ++it){
template_function(*it);
}
for_each<K - 1>(container.prev, template_function);
}
template<> void for_each<0>(TContainer<0> & container, template_function){
for(auto it = container.vec.begin(); it != container.vec.end(); ++it){
template_function(*it);
}
}
ような何かだから私はあなたがテンプレート関数を渡すことはできません
template <int N> add_to_T(T<N> & in){
in.i += my_instance_data;
}
for_each(my_container, add_to_T);