Skip to content

C++ 与跨平台开发

1. C++ 编程技巧

1.1 使用 do-while 减少重复代码

使用 do ... while 一定程度上能减小重复代码:

cpp
#include <iostream>

int main() {
    int choice;
    
    do {
        std::cout << "1. 选项1" << std::endl;
        std::cout << "2. 选项2" << std::endl;
        std::cout << "0. 退出" << std::endl;
        std::cout << "请选择: ";
        std::cin >> choice;
        
        switch (choice) {
            case 1:
                // 处理选项1
                break;
            case 2:
                // 处理选项2
                break;
        }
        
    } while (choice != 0);
    
    return 0;
}

2. Qt/QML 开发

2.1 QWidget 嵌入到 QML

在 QML 中嵌入 QWidget,实现混合开发:

参考:[转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取

2.2 VS Code C++ CMake 开发

使用 VS Code 进行 C++ CMake 项目开发的最佳实践。

3. OpenGL 图形编程

OpenGL 是一个跨平台的图形 API,用于渲染 2D 和 3D 图形。

3.1 基础概念

  • 顶点着色器:处理顶点数据
  • 片段着色器:处理像素颜色
  • VAO:顶点数组对象
  • VBO:顶点缓冲对象
  • EBO:元素缓冲对象

3.2 示例项目

通过实际项目学习 OpenGL 编程。

4. Windows API 开发

4.1 基础窗口创建

使用 Win32 API 创建基础窗口程序。

4.2 WebView2 集成

在 C++ 应用中集成 WebView2,实现现代化的 Web UI。

参考:Get started with WebView2 in Win32 apps

5. CMake 构建系统

5.1 基础配置

cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

add_executable(myapp main.cpp)

# 添加库
add_library(mylib STATIC mylib.cpp)
target_link_libraries(myapp mylib)

5.2 查找依赖

cmake
# 查找 Qt5
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
target_link_libraries(myapp Qt5::Core Qt5::Widgets)

# 查找 OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(myapp ${OpenCV_LIBS})

5.3 跨平台配置

cmake
if(WIN32)
    # Windows 特定配置
    add_definitions(-D_WIN32)
elseif(UNIX)
    # Linux/Mac 特定配置
    add_definitions(-D_UNIX)
endif()

# 设置输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

6. STL 标准库

6.1 容器

  • vector:动态数组
  • list:双向链表
  • deque:双端队列
  • map:有序映射
  • unordered_map:无序映射(哈希表)
  • set:有序集合
  • unordered_set:无序集合

6.2 算法

cpp
#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {5, 2, 8, 1, 9};
    
    // 排序
    std::sort(vec.begin(), vec.end());
    
    // 查找
    auto it = std::find(vec.begin(), vec.end(), 8);
    
    // 遍历
    std::for_each(vec.begin(), vec.end(), [](int n) {
        std::cout << n << " ";
    });
    
    return 0;
}

7. 竞赛编程

7.1 常用技巧

  • 使用快速 I/O
  • 预处理常用数据
  • 使用位运算优化
  • 掌握常见算法模板

7.2 模板代码

cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    // 你的代码
    
    return 0;
}

8. 相关资源