C++现代教程四

html 复制代码
float转string不带多余0
float a = 1.2;
std::tostring(a); 		 // 1.200000
std::ostringstream strStream;
strStream << a; // 1.2
if (!strStream.view().empty())	// 判定流有数据

// 边框融合
float measureText(std::u8string text, FontTypes::Rectangle &rectangle)
{
    float width   = 0;
    auto  results = shape(text, {});
    if (results.empty())
        return 0;
    using FLimit = std::numeric_limits<float>;
    float minX   = FLimit::max();
    float minY   = FLimit::max();
    float maxX   = FLimit::min();
    float maxY   = FLimit::min();
    for (auto &result : results) {
        FontTypes::Rectangle inkBound, outBound;
        getGlyphBound(result.codepoint, inkBound, outBound);
        inkBound.x += width;

        minX = std::min(minX, inkBound.x);
        minY = std::min(minY, inkBound.y);
        maxX = std::max(maxX, inkBound.x + inkBound.width);
        maxY = std::max(maxY, inkBound.y + inkBound.height);

        width += result.advance;
    }
    rectangle.x      = minX;
    rectangle.y      = minY;
    rectangle.width  = maxX - minX;
    rectangle.height = maxY - minY;
}

// #line使用
#line 143 "emoji_presentation_scanner.c" 这行代码告诉预处理器,从这行开始,任何编译错误或警告都应该指向 "emoji_presentation_scanner.c" 文件的第 143 行。
如果你使用脚本或工具自动生成代码,#line 指令可以用来设置生成代码的行号和文件名,确保错误信息指向生成代码的源文件和行号。
#line 100 "generated_code.c"		// Auto-generated code goes here.. 
#line 指令可以在宏体内重设行号和文件名,以便错误信息指向宏定义处,而不是宏展开处
#define MY_MACRO() \
 do { \
   #line __LINE__ + 1 __FILE__ \
   /* ... macro body ... */ \
 } while(0)
 
# 范围限制
#define LimitRange(x, min, max)  x = x < min ? min : (x > max ? max : x)

# std::call_once
保证函数或者一些代码段在并发或者多线程的情况下,始终只会被执行一次。
#include <iostream>
#include <mutex>
#include <thread>
std::once_flag flag;

void initializeResource() {
    std::cout << "Resource initialized." << std::endl;
    // 进行初始化工作
}

void doSomething() {
    std::call_once(flag, initializeResource);
    // 在这里可以安全地使用已初始化的资源
    std::cout << "Doing something with the resource." << std::endl;
}

int main() {
    std::thread t1(doSomething);
    std::thread t2(doSomething);

    t1.join();
    t2.join();

    return 0;
}

// bitset初始化
template <typename... T>
constexpr auto BitSet(T... t)
{
    return ((1 << (t)) | ...);
}

// 超长枚举
enum Flag : uint16_t{
	A = 1,
	B,
	C,
	AB = BitSet(A, B);
	ABC = BitSet(A, B, C);
};


/*
 * C++ IMPL通用模板设计
 */

/*
 * 数据层
 */
class Data {
public:
	float a;
	float b;
	float c;
};

/*
 * 接口层
 */
class Accessor {
public:
    using Impl = Data;
    using ImplSP = std::shared_ptr<Data>;
	
	Accessor() : m_impl(std::make_shared<Impl>) {}
	
	void setA(float v) { m_impl->a = v; }
	float getA() const { return m_impl->a; }
private:
	ImplSP m_impl;
};

C++ 现代教程三-CSDN博客


创作不易,小小的支持一下吧!

相关推荐
通信小呆呆2 分钟前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
老歌老听老掉牙5 分钟前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso
笑容掩饰我的失落9 分钟前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black1 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
瑞雪兆丰年兮2 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
2601_967979123 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
SomeOtherTime3 小时前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔4 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆4 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
喵本喵叁肆4 小时前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言