当前位置:网站首页>什么是混合元编程
什么是混合元编程
2022-08-01 13:12:00 【发如雪-ty】
有两个数组:
int a[3] = {
1,3,5};
int b[3] = {
2,4,6}
计算数组a和数组b的点积和,如果不用循环,还能做到正确的相加,那自然是效率最高的实现手段。也就是下面的代码:
int nResult = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
但是数组中元素的数量是不确定的,所以混合元编程就登场了。看如下的代码:
template<typename T, int U>
struct DotProduct
{
static T Result(T* a, T* b)
{
return (*a)* (*b) + DotProduct<T, U - 1>::Result(a + 1, b + 1);
}
};
template<typename T>
struct DotProduct<T,0>
{
static T Result(T* a, T* b)
{
return T{
};
}
};
void main()
{
int a[] = {
1,3,5 };
int b[] = {
2,4,6 };
int nResult = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
cout << nResult << endl;
nResult = DotProduct<int, 3>::Result(a, b);
cout << nResult << endl;
system("pause");
}
结果:
从上述结果可以看出,达到了不用循环实现了计算两个数组点击的效果。
其实nResult = DotProduct<int, 3>::Result(a, b);等价于
nResult = (*a) * (*b) + (*(a+1)) * (*(b+1)) +(*(a+2)) * (*(b+2));
在这里编译器根据这段代码编译(生成)出一段新的代码,实现程序真正功能的是这段新的代码,也就是说混合元编程经过编译后能生成一段代码,这段代码实现了数组a和数组b真正的点击计算。
因为混合元编程的存在,在看待c++编译器编译c++程序这件事情上,把整个编译过程可以分成两个阶段是比较合适的,分别是前期阶段和后期阶段。
前期阶段的C++编译器实际上充当了解释器的角色,直接针对程序员开发的c++源码(元编程代码)进行解释执行,这一阶段的工作就是产生一些列c++代码。
后期阶段的c++编译器恢复了我们比较熟悉的c++编译器本来应该具备的功能:针对前期阶段产生的结果代码进行编译、链接、最终生成可执行程序。
边栏推荐
猜你喜欢

一文带你读懂云原生、微服务与高可用

数字孪生北京故宫,元宇宙推进旅游业进程

消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?

透过开发抽奖小程序,体会创新与迭代

库函数的模拟实现(strlen)(strcpy)(strcat)(strcmp)(strstr)(memcpy)(memmove)(C语言)(VS)

uniapp读取和写入文件

如何使用 Authing 单点登录,集成 Discourse 论坛?

【StoneDB Class】入门第二课:StoneDB 整体架构解析

leetcode:1201. 丑数 III【二分 + 数学 + 容斥原理】

MCU开发是什么?国内MCU产业现状如何
随机推荐
软件设计师考点汇总(室内设计师个人总结)
Qt实战案例(56)——利用QProcess实现应用程序重启功能
嵌入式开发:创建和使用可移植类型的7个技巧
What is consistent hashing?In what scenarios can it be applied?
Istio投入生产的障碍以及如何解决这些问题
一文带你读懂云原生、微服务与高可用
Based on 10 years of experience in stability assurance, what are the three key questions to be answered in failure recovery?|TakinTalks big coffee sharing
透过开发抽奖小程序,体会创新与迭代
【StoneDB Class】入门第二课:StoneDB 整体架构解析
Do wildcard SSL certificates not support multiple domains?
PanGu-Coder:函数级的代码生成模型
高仿项目协作工具【Worktile】,从零带你一步步实现组织架构、网盘、消息、项目、审批等功能
postgresql之page分配管理(一)
10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?|TakinTalks大咖分享
四足机器人软件架构现状分析
SQL函数 STR
重磅消息 | Authing 实现与西门子低代码平台的集成
使用open3d可视化3d人脸
CCS软件安装教程(超级详细)「建议收藏」
postgresql之page分配管理(二)