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博客


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

相关推荐
java资料站3 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天3 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙4 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂4 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i4 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网4 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术4 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
八解毒剂5 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
乐迪信息5 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
FakeOccupational5 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记