模板参数扣除与策略
Template parameters deduction with policies
我有一个类,应该用于将操作符应用于标量或向量,以及这两个的混合。类可以工作,但我必须手动传递模板参数,而我希望从构造函数中扣除这些参数。代码如下:
template <template <class,class> class OP, typename Type1, typename Type2>
class BinaryOperator :
public OP <typename Type1::ReturnType, typename Type2::ReturnType> {
public:
BinaryOperator(Type1* arg1_, Type2* arg2_) :
m_arg1(arg1_),
m_arg2(arg2_) {
}
ReturnType evaluate() {
return this->apply(m_arg1->evaluate(), m_arg2->evaluate());
}
private:
Type1* m_arg1;
Type2* m_arg2;
};
现在,OP是一个具有完整模板特化的结构,用于标量/矢量的各种组合,即2个参数的ReturnTypes。我必须明确地写
new BinaryOperator<op_adder, Axis, Constant>(a1, c2)
而我只想写
new BinaryOperator<op_adder>(a1, c2)
,并扣除轴和常数。编译错误是:
too few template arguments for class template 'BinaryOperator'
有人能帮忙吗?我做错了什么?谢谢亚历克斯
类类型永远不能推导模板参数;毕竟,在知道要创建什么类之前,编译器怎么知道要考虑哪些构造函数呢?
解决方案是编写一个辅助函数,即std::make_pair
。
template<typename T, typename U, typename V>
BinaryOperator<T, U, V> make_binary_operator(const U& u, const V& v) {
return BinaryOperator<T, U, V>(u, v);
}
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- 在基于策略的重构中缩短模板参数
- 基于重载构造函数的策略类模板参数的选择
- 模板参数扣除与策略
- 避免用户指定策略模板参数