Modern Cpp记录

#include <iostream>
# include <set>
#include <chrono>
#ifndef   UNUSED
#define   UNUSED(v)   (void)(v)
#endif
typedef std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> time_point;
//void logg(const time_point& tp, std::string& name)
void logg(const time_point& tp, const std::string& name)
{
    UNUSED(tp);
    UNUSED(name);
    std::cout << " name: " << name << std::endl;
}
void log_add(const std::string& name, std::multiset<std::string>& names)
{
    auto now = std::chrono::system_clock::now();
    std::string temp("abc");
    logg(now, std::string("xxx"));
    logg(now, "xxx");
    logg(now, temp);
    names.emplace(name);
}
template <typename T>
void log_add_T(T&& name, std::multiset<std::string>& names)
{
    auto now = std::chrono::system_clock::now();
    logg(now, "xxx");
    names.emplace(std::forward<T>(name));
}
int main(int argc, char *argv[])
{
    std::multiset<std::string> nameset;
    log_add("abcd", nameset);
    log_add_T("aaa", nameset);
    return 0;
}

  


1. 如果采用logg函数的形式为 void logg(const time_point& tp, std::string& name), 则
    logg(now, std::string("xxx"));
    logg(now, "xxx");
  都会编译失败。

2. log_add_T函数采用万能引用参数,利用完美转发,效率比log_add高!

原文地址:https://www.cnblogs.com/kex1n/p/11839232.html

时间: 2024-10-19 09:03:33

Modern Cpp记录的相关文章

跨平台渲染框架尝试 - constant buffer的管理

1. Preface Constant buffer是我们在编写shader的时候,打交道最多的一种buffer resource了.constant表明了constant buffer中的数据,在一次draw call的执行过程中都是不变的:而在不同的draw call之间,我们可以修改其中的数据.它是我们把数据从CPU传递到GPU最常见的方法.constant buffer的概念和定义就不在这里赘述了,鄙文主要讨论如何优雅的管理constant buffer. 2. How to creat

AS使用ndkbuild创建cpp工程记录

AS使用ndkbuild创建cpp工程记录 由于需要使用c++和.so库,所以必须要使用ndk方式,记录下过程. 现状是,我们得到第三方的.so和一些头文件类,需要使用这些类和函数来完成我们的功能,比如说机器学习算法运算库,但如何使用这些在.so内的函数呢?需要把.so和头文件加载到项目中,这就需要使用Android.mk和Application.mk文件来编译了,==需要注意的是这仅限于使用ndk-build命令编译的项目==,因为现在AS2.2后默认使用了cmake来编译native项目.

使用Line Pos Info 和 Modern C++ 改进打印日志记录

使用Line Pos Info 和 Modern C++ 改进打印日志记录 使用跟踪值:不管自己是多么的精通,可能仍然使用调试的主要方法之一 printf , TRaCE, outputDebugString, 等…然后扫描输出, 同时调试. 添加有关行号和日志消息来源的文件的信息是一种非常有效的方法,可以为你节省大量时间,在这篇文章将描述一个在visual Studio中特别有用的技巧,在其他IDE/编译器中有所帮助. 还将展示现在C++和C++20如何使代码更好. 常规 在调试C++代码时,

拇指接龙游戏升级记录03(升级MainScene.cpp)

MainScene是拇指接龙游戏的主游戏场景文件,拥有近5000行代码. 说实在的,实现自cocos2d-x 2.x版本向当下最新的3.8.1版本的升级过程,其中涉及的技术不是一下能够说明的.有些是形式上的简单修改,更多的则是性能上的提升相应的修改. 简单总结一下主场景文件MainScene的升级工作.主要集中在如下几个方面: 1.扑克拖动相关事件的升级修改: 这一点在网络上已经有不少细致的资料,在此不赘述,请参考后面的引文. 如今的手指移动事件操作起来要比2.x时期简化多了. 2. CCArr

include .h 以及.cpp的记录

VC include 路径解析要了解vc中使用#include命令包含头文件所搜寻的路径,必须先了解vc中的几种路径:1. 系统路径 系统路径在vc中是"Tools->Options->Directories"中"Include files"指定的路径. 打开此对话框会发现默认有这几条路径:C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE C:\Program Files\Microsoft Vi

读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)

1.以设计为目标的程序库都必须帮助使用者完毕静止的设计.以实现使用者自己的constraints,而不是实现预先定义好的constraints. 2.Anything that can be done in more than one way should be identified and migrated from the class to a policy 3.Design is choice. Most often, the struggle is not that there is n

CPP之全面总结(上)

OOP之类和对象 1. this指针的引入 每个成员函数都有一个额外的隐含的形参,这个参数就是this指针,它指向调用对象的地址.默认情况下,this的类型是指向类类型非常量版本的常量指针.可以表示成如下伪代码形式: /* 假设现在有一个类Sales_data,以及其非常量Sales_data类型对象,则该隐式的this指针可以写成如下伪代码形式 */ Sales_data *const this = &total; this指针一般用于解决重名问题和返回自身的值或者引用.例如: struct

bzoj 4780: [Usaco2017 Open]Modern Art 2

4780: [Usaco2017 Open]Modern Art 2 Time Limit: 10 Sec  Memory Limit: 128 MB Description Having become bored with standard 2-dimensional artwork (and also frustrated at others copying her w ork), the great bovine artist Picowso has decided to switch t

[C++11] Effective Modern C++ 读书笔记

本文记录了我读Effective Modern C++时自己的一些理解和心得. item1:模板类型推导 1)reference属性不能通过传值参数传入模板函数.这就意味着如果模板函数需要一个reference类型的参数,必须在模板声明中将其声明为reference,否则,即使使用一个reference类型的变量调用模板函数,类型推导的结果将不带reference属性. 2)constant和volatile属性也不能通过传值参数传入模板函数,但是可以通过reference参数传入这些属性. 3