使用 "runtime importing" 使 C++ 函数跨平台

Making a c++ function cross platform with "runtime importing"

本文关键字:函数 跨平台 C++ importing runtime 使用      更新时间:2023-10-16

我正在编写更新终端大小的简单功能:

bool DisplayManager::getWindowSize(){
    Vector windowsize; // Class with h and w attributes and operator overloading
    #ifdef __linux__ 
    try{
        #include<sys/ioctl.h>
        #include<unistd.h> 
        struct winsize window;
        ioctl(STDOUT_FILENO, TIOCGWINSZ, &window);
        windowsize.w = window.ws_col;
        windowsize.h = window.ws_row;
    }catch(...){
        return false;
    }
    #elif _WIN32 | _WIN64
    try{
        #include<windows.h>
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
        newWindowsize.w = csbi.srWindow.Right - csbi.rsWindow.Left + 1;
        newWindowsize.h = csbi.srWindow.Bottom - csbi.rsWindow.Top + 1;
    }catch(...){
        return false;
    }
    #endif
    mWindowsize = windowsize;
    return true;
}

我试图使其交叉平台,并添加,如果else 有一个分支导入两个特定的linux库,而另一个则承担了Windows库,但这不起作用。

我试图提出一个可以有效的解决方案,但我真的什么都不考虑。

如果有可能,我想将功能保留在一个块中,而没有两个单独的文件,一个每个os。

您无法 #include库标头进入函数,并期望它起作用(除非它是一个非常规的库,其文档显示您需要这样做(。您必须将它们包括在全球范围中:

#ifdef __linux__ 
#include<sys/ioctl.h>
#include<unistd.h> 
#elif _WIN32 | _WIN64
#include<windows.h>
#endif
bool DisplayManager::getWindowSize(){

用"运行时导入"制作C 功能跨平台

您不能在运行时"导入"标头。也就是说,在预处理时定义了__linux___WIN32_WIN64,因此这里无需在运行时"导入"标题。