gpt4 book ai didi

c++ - 将模板成员函数传递给模板

转载 作者:太空狗 更新时间:2023-10-29 21:48:45 26 4
gpt4 key购买 nike

我有一组以整数 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);

最佳答案

您不能传递模板函数。但是您可以传递一个结构实例(一个函数对象),它包含一个模板函数,例如

template <typename F>
void for_each(TContainer<0>& container, F f)
{
for (auto& t : container.vec)
f(t);
}

template <int N, typename F>
void for_each(TContainer<N>& container, F f)
{
for (auto& t : container.vec)
f(t);
for_each(container.prev, std::move(f));
}


struct TAdder {
template <int N>
void operator()(T<N>& t) const
{
t.i += N;
}
};

for_each(c, TAdder{});

关于c++ - 将模板成员函数传递给模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com