模板化类的函数作为模板参数
Function of a templated class as template parameter
我想为泛型操作符创建一个模板类。该类将有两个结构体表示一个值作为输入:
struct Value {
DataType type;
size_t dataSize;
char* data;
};
我已经用老式的切换用例写了一个类型演绎。在将data-ptr转换为该类型之后,我想对输入值应用如下操作:
template<class Operation>
class ApplyOperation {
Value* operator()(const Value* a, const Value* b) const {
//find type of a and b
//cast a and b to their types
Operation<aT,bT> op;
return op(a,b);
}
};
现在我可以为每个操作写一个像这样的小结构体:
template<class A, class B>
struct Add {
A operator()(A a, B b) const { return a + b; }
};
我看到了一个叫做operator的boost类:http://www.boost.org/doc/libs/1_59_0/libs/utility/operators.htm
,我想用它来达到我的目的。但我不知道怎么积分因为结构体中的算子不是函子。那么可以这样使用它吗?:
ApplyOperation<boost::addable::operator+> add;
add(a,b);
实际上我正在尝试用这个类进行测试:
template<template<class T, class U, class...> class OperatorClass,class F>
struct ApplyOperator {
template<class T, class U>
T foo(T a, U b) {
OperatorClass<T,U> opClass;
return opClass.operator+(a,b); //this works of course
}
};
我想要得到的是:
template<template<class T, class U, class...> class OperatorClass,class F>
struct ApplyOperator {
template<class T, class U>
T foo(T a, U b) {
OperatorClass<T,U> opClass;
return opClass.F(a,b);
}
};
实例化如下:
ApplyOperation<boost::addable, operator+> add;
由于未知类型操作符+,这当然不起作用。那么我如何使用模板调用operator+函数呢?
有办法解决这个问题吗?
我不确定我完全理解了这个问题。但是看起来您正在尝试为模板ApplyOperator提供对象实例(而不是类型)。由于operator+绝对不是类型,也不是整型常量,因此无论如何都不能用作模板实参。您需要做的是将操作作为构造函数的参数,而不是对象的类型。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类