使用 "runtime importing" 使 C++ 函数跨平台
Making a c++ function cross platform with "runtime importing"
我正在编写更新终端大小的简单功能:
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
,因此这里无需在运行时"导入"标题。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 使用 "runtime importing" 使 C++ 函数跨平台
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 从函数指针创建boost::函数的跨平台方法