# Simple Cpp Library
**Repository Path**: cb604bl/simple-cpp-library
## Basic Information
- **Project Name**: Simple Cpp Library
- **Description**: 一个C++的类标准库,极简实现,追求跨平台性和跨编译器性
- **Primary Language**: C/C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2025-12-03
- **Last Updated**: 2026-02-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Simple Cpp Library

# 📖概要
Simple Cpp Library(在下文我们简称为**SCL**)是一个模仿C++标准库的**类标准库**,追求极简实现,跨平台性以及跨编译器性,有关什么是**类标准库**请看下文
我们希望SCL库能够在教育、学习交流、嵌入式开发、资源受限的设备等领域/环境上发挥作用——当然,它或许只能成为我们的一个玩具项目,但这不是问题,重要的是我们开发了它,这就够了
# 🤔何为类标准库?
这或许是一个在本项目中被新创造出来的术语,下面给出它的简单定义
类标准库(Standard-Like Library, SLL)是一个我们为本项目定义的概念,它指的是:
- 核心定位:
一个自主实现的代码库,它系统地模仿C++标准库的设计哲学与接口风格,旨在作为标准库的替代实现或在特殊场景下使用
- 生态位:
它介于"普通第三方库"与"官方标准库实现"(如libc++, libstdc++)之间,它比前者更"标准",比后者更"自由"
- 关键特性:
有意为之的偏离: 它可以为了优化、兼容性或实验性,不严格遵循标准规范,保留废弃接口或引入新特性
场景驱动: 常用于学习、移植、受限环境(如嵌入式)或特定的性能调优
# ⚙️安装本库
在写代码之前,请保证你使用的是Unix/Linux系统,并确认你安装了如下工具:
```
cmake make git clang/gcc
```
使用如下命令克隆本仓库:
```sh
git clone git@gitee.com:cb604bl/simple-cpp-library.git
```
克隆完成后,进入仓库文件夹
```sh
cd simple-cpp-library
```
运行安装脚本来安装库到你的设备中
```sh
chmod 755 ./install.sh
./install.sh
```
脚本会询问你
```
Do you want to continue?[Y/n]:
```
如果不输入Y,安装将会终止,不会更改系统文件
输入Y后,当提示了
```
[Process]: Simple Cpp Library installation completed
```
那么恭喜你,SCL库已经安装完成了🎉!
# 🚀快速上手
想在你的C\++项目中使用SCL库十分简单,在此之前你需要保证自己的C++标准在17及以上
随后,你只需要在你的CMakeLists.txt里面写上:
```cmake
if(DEFINED ENV{PREFIX})
set(SCL_INCLUDE_DIR "$ENV{PREFIX}/local/include/scl")
set(SCL_LIBRARY "$ENV{PREFIX}/local/lib/libscl.a")
else()
set(SCL_INCLUDE_DIR "/usr/local/include/scl")
set(SCL_LIBRARY "/usr/local/lib/libscl.a")
endif()
```
接着你就可以方便的配置目标的包含目录和链接库了!
```cmake
target_include_directories([target] [PUBLIC|PRIVATE|INTERFACE] "${SCL_INCLUDE_DIR}")
target_link_libraries([target] [PUBLIC|PRIVATE|INTERFACE] "${SCL_LIBRARY}")
```
示例:
```cmake
cmake_minimum_required(VERSION 3.15)
project(
SCL_TEST
LANGUAGES CXX C
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
add_executable(test "main.cpp")
if(DEFINED ENV{PREFIX})
set(SCL_INCLUDE_DIR "$ENV{PREFIX}/local/include/scl")
set(SCL_LIBRARY "$ENV{PREFIX}/local/lib/libscl.a")
else()
set(SCL_INCLUDE_DIR "/usr/local/include/scl")
set(SCL_LIBRARY "/usr/local/lib/libscl.a")
endif()
target_include_directories(test PUBLIC "${SCL_INCLUDE_DIR}")
target_link_libraries(test PUBLIC "${SCL_LIBRARY}")
```
在main.cpp中
```cpp
#include
#include
#include
int main()
{
//scl中的独特接口, 不需要::value
scl::printf("%d\n", scl::is_class);
//无异常的new
int* i = new(scl::nothrow) int;
//placement-new
new(i) int(23);
scl::printf("%d\n", *i);
delete i;
}
```
编译并运行它,你可以看见如下输出:
```
0
23
```
# 🤝贡献与合作
[待编写]