1
我有下面的代码定义一个仿函数模板和功能 running_op,这需要一个数组,它的长度和仿函数应用 到列表:传递一个未初始化模板名称为函数模板扩展
template <class Type>
struct SumFunctor {
Type sum;
SumFunctor() : sum(0) {};
Type operator()(Type next) {
return sum += next;
}
};
template <class Container, class Functor>
inline Container running_op(Container& container, Functor functor) {
transform(container.begin(), container.end(), container.begin(), functor);
return container;
}
这适用于以下方式使用:
list<float> a({1,1,1,1});
running_op(a, SumFunctor<float>());
我想做些什么可以做,以避免在实例化函子类型的 名称容器是用它作为这样:
list<float> a({1,1,1,1});
running_op(a, SumFunctor);
由于的所包含的类型可以使用集装箱:: VALUE_TYPE的running_op模板 找到我想做点什么如下 (不工作)来实例化适当类型的函子:
template <class Container, class Functor>
inline Container running_op(Container& container, Functor functor) {
typedef typename Container::value_type ContainerType;
transform(container.begin(), container.end(), container.begin(), functor<ContainerType>());
return container;
}
有没有什么办法可以将一个 未被实例化的模板传递给另一个模板以供以后实例化? 是否有一个特殊的关键字,我应该使用 模板参数列表中的类以外的类(模板在这种情况下不起作用)?真的是 我只是想传递一个符号,它是仿函数模板名称;是 那可能吗?
我想我尝试了类似的东西,它接近我想要的东西,但我仍然好奇,如果我可以按照我在没有宏的问题中概述的方式来做到这一点。 – 2012-02-03 04:26:08
不错,够近。感谢你的回答。 – 2012-02-03 04:50:22