2018年4月15日 星期日

於mbed SDK Porting課堂講解Callback(R (*func)() = 0),而隨手Coding完成C/C++程式對應之解說範例

2018/4/15 課堂進行mbed SDK Porting,講義進行至P51頁的 class Callback<R()>{ ... }; 時,全部的學員對這C++的template、function pointer、struct & union之混和運用,可以說是完全不熟悉,或根本沒見過這些語法。耶。。。學員幾乎都是研究所畢業了,且在業界也工作多年的喔,我上課時口頭調查C與C++熟悉嗎? 幾乎都認為熟悉喔。 不多說,我就利用最後的近十分鐘的時間,順手寫一個簡單的對應範例,一邊寫,一邊講解這些語法,寫完後。。。編譯成功& 執行成功,再問看學員,懂了嗎?? 嗯,至少懂了,但。。還是要回去再多複習: 程式如下:


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void addNum( int a,int b){  printf("%d+%d=%d\r\n", a,b,a+b );  }
int addNum2( int a,int b){  return a+b; }
double addNum3( double a,double b){  return a- b; }

template<typename RT,typename argType>
class MATH
{
public:
MATH():personObj(){}
void setFpointer( RT (*funP)(argType,argType) );
union
{
RT (*funP)(argType,argType);
  void* vPointF;
}_pOPF;
struct person
{ person(){ printf("person()\r\n"); strcpy(myName,"CYH"); age=9999;  }
  char myName[8];
  int age;
}personObj;
};
template<typename RT,typename argType>
void MATH<RT,argType>::setFpointer( RT (*funP)(argType,argType) )
{
  _pOPF.funP = funP;
}
int main(int argc, char** argv) {
MATH<void,int> MATHObj;
MATH<int,int> intMATHObj;
MATH<double,double> doubleMATHObj;

MATHObj.setFpointer( addNum );
MATHObj._pOPF.funP( 100,10 );

intMATHObj.setFpointer( addNum2 );
printf( "intMATHObj._pOPF.funP(200,20)=%d\r\n",intMATHObj._pOPF.funP(200,20) );

doubleMATHObj.setFpointer( addNum3 );
printf( "doubleMATHObj._pOPF.funP(200.2,20.2)=%f\r\n",doubleMATHObj._pOPF.funP(200.2,20.2) );
printf( "%s age is %d\r\n", MATHObj.personObj.myName, MATHObj.personObj.age );
system("PAUSE");
return 0;

}

沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...