// 算法描述结构
template <typename T>
struct AlgorithmDesc {
// 命名区
using SubAlgorithmDesc_t = SubAlgorithmDesc<T>;
// 除存储指针以外,该算法及子算法涉及的所有输入常量
T a;
T b;
// 临时计算变量区
SubAlgorithmDesc_t sub_algo_desc; // 子算法描述也放这里
T c;
// 构造函数区
AlgorithmDesc() {}
AlgorithmDesc(const T a, const T b) :
a(a), b(b), sub_algo_desc(a, b) {
c = a + b;
}
// 方法区
inline bool valid() {
return c == sub_algo_desc.c;
}
};
// 执行算法接口, 所有存储相关指针都放这里
// 匿名函数接口也放这里
template <typename T, typename func_t, typename AlgorithmDesc_t>
void algorithm_process(AlgorithmDesc_t &desc, T *ptr, const func_t &f)
{
}
例子
#include <iostream>
using namespace std;
struct UnaryDesc {
int length;
UnaryDesc() {}
UnaryDesc(const int length) :
length(length) {}
};
template<typename T, typename func_t, typename UnaryDesc_t>
void unary_kernel(UnaryDesc_t &desc, T *a, const func_t& func) {
for(int i = 0; i < desc.length; i++) {
a[i] = func(a[i]);
}
}
int main()
{
float a[5] = {1,2,3,4,5};
auto desc = UnaryDesc(5);
unary_kernel(desc, a, [](auto i) -> auto {return i*2;});
for(auto x:a) cout << x << endl;
}