C++应用之HAL层文件逻辑

    HAL层是硬件抽象层,指的意思就是说调用该层的api是和平台无关的,在不同的平台都能调用成功。所有我们需要对不同平台的实现进行一层封装,就HAL层。以下是文件逻辑实现:

/*
HAL_logic
    |__ HAL_logic.sh
    |__ HAL_logic
          |__ HAL_logic.vcxproj
          |__ main.cpp
          |__ print.h      --------------------- 实现与平台无关
          |__ print.cpp    -----------------╯
          |__ platform
                |__ linux
                |     |__print_linux.h    ------ 实现与linux平台相关
                |     |__print_linux.cpp  ---╯
                |__ windows
                      | __print_win.h     ------ 实现与win平台相关
                      | __print_win.cpp   ---╯

   print()
     |
print_linux.h
     |-------->>> 合并 >>>--- print.h --->>>--- 最终只使用print.h供外部调用
print_win.h                   |                   |
     |                       out()                |
   print()                    |                   | 
                              print()-------------|
(相同功能的函数,函数名需相同,返回值也不同)

print_linux.h  print_win.h  print.h 三者一起实现print功能
*/

#include "print.h"
int main(void)
{
    print(std::string("qwe"));
    printa();

    getchar();
    return 0;
}


// print.h
#ifndef _PRINT_H_
#define _PRINT_H_

#ifdef WIN32
#include "platform/windows/print_win.h"
#else
#include "platform/linux/print_linux.h"
#endif

void printa(void);

#endif


// print.cpp
#include "print.h"
#include <iostream>

void printa(void)
{
    std::cout << "print_all" << std::endl;
}


// print_win.h
#ifndef _PRINT_WIN_H_
#define _PRINT_WIN_H_

#include <string>
void print(std::string str);

#endif


// print_win.cpp
#include "print_win.h"
#include "windows.h"
#include <iostream>
#include <string>

void print(std::string str)
{
    DWORD word = 123;
    std::cout << "print_win : " << str << word << std::endl;
}


// print_linux.h
#ifndef _PRINT_LINUX_H_
#define _PRINT_LINUX_H_

#include <string>
void print(std::string str);

#endif


// print_linux.cpp
#include "print_linux.h"
#include <iostream>
#include <string>
#include <unistd.h>

void print(std::string str)
{
    std::cout << "print_linux : " << str << getpid() << std::endl;
}

猜你喜欢

转载自blog.csdn.net/qccz123456/article/details/80278248