草庐IT

m_Header

全部标签

c++ - 可以将 "using std::swap;"放在 header 中吗?

我读到过,当你在C++中交换东西时,你应该总是使用std::swap;,然后调用swap不合格,因此它会自动为std::和内置类型选择std::的,为自定义类型选择自定义的,以及模板化的std::一个用于其他一切。那么,我是否可以将usingstd::swap;放在每个文件包含的header中而不必担心它?我知道避免在header中使用是常见的做法。但是,在这种特殊情况下它有问题吗? 最佳答案 swap的指导是使用std::swap在尽可能局部的范围内。可以肯定的是,广泛包含的头文件中的一个不满足此要求。它仍然以意想不到的方式污染了

c++ - CMake - 如何使库的私有(private) header 可用于其测试?

因此,我正在将一个项目的一部分制作成一个库,其中一些header是库的接口(interface),其余部分是库本身私有(private)的。所以对于我的图书馆来说,CMAKE部分看起来像:add_library(${PROJECT_NAME}${PROJECT_SOURCES}"${PROJECT_BINARY_DIR}/libversion.h")add_library(my::libALIAS${PROJECT_NAME})target_include_directories(${PROJECT_NAME}PRIVATE${Boost_INCLUDE_DIRS}PRIVATE${P

c++ - 使用 Boost + GCC + 预编译 header 的编译时间变慢

运行:gcc版本4.2.1(AppleInc.build5664)我创建了一个带有默认预编译header的苹果XCode项目。它看起来很慢,一个没有主要功能的琐碎主文件不包含没有代码编译需要6秒,这是在我升级到新的SSD驱动器之后。我在笔记本电脑上,但我对升级到工作站会缓解我的问题有所保留。如果我关闭预编译头,那么主文件会在一秒钟内完成编译。似乎使用预编译头会对所有文件造成不利影响。这种延迟让我想避免编译和试验不好的代码。这是我在预编译header中包含的内容:#pragmaonce#include#include#include#include#include#include#inc

c++ - 仅 header 文件中的静态 const 整数类成员 - 正确的方法?

假设我有以下示例:#includeclassA{public:staticconststd::size_tvalue=42;};简而言之,我有(或者更好的是,想要)一个类A和一个名为value的staticconststd::size_t成员值42(在编译时确定)。现在,IIRC,这只在特定情况下才能正常工作。例如,当您获取A::value的地址时,它不会。为了使其在所有情况下都能正常工作,您需要在一些实现文件中添加一个定义:conststd::size_tA::value;但是,我不能这样做,因为我希望这个文件是header-only。另一个常见的解决方案是:classA{publi

c++ - Valgrind 显示内存泄漏且 main 为空,不包含 header

卢本图15.10我的项目存在内存泄漏。我可以找到它们,所以我清理了我的main.cpp文件,现在它看起来像这样:intmain(){return0;}当我使用命令检查内存时:valgrind--leak-check=full--show-leak-kinds=all./MyProgram>log1.txt2>&1我遇到了这些错误:==5219====5219==LEAKSUMMARY:==5219==definitelylost:0bytesin0blocks==5219==indirectlylost:0bytesin0blocks==5219==possiblylost:728by

c++ - #ifdef 无法按预期使用预编译 header

我有如下部分代码:#defineFEATURE_A1voidfunction(){//somecode#ifdefFEATURE_A//codetobeexecutedwhenthisfeatureisdefined#endif//somecode}程序不执行#ifdef-#endif中的代码。但是当我将#ifdef更改为#ifndef并删除#define宏时,代码就会执行。下面的代码按预期工作。//#defineFEATURE_A1voidfunction(){//somecode#ifndefFEATURE_A//codetobeexecutedwhenthisfeatureisd

c++ - 找到 g++ 使用的 STL header 的路径

我需要在std::vector的调试版本中查找一些东西,我不记得header的实际位置。这是在Windows上的MSYS下,这很棘手,因为你有/include,/mingw/include,/mingw/mingw32/include,/usr/include,我仍然找不到它们...我知道一种方法,就是这样写一个文件:#includeintmain(){return0;}然后$g++-Etemp.cpp|grepvector我们发现它在这里:/mingw/lib/gcc/mingw32/4.8.1/include/c++/vector但是有没有更快的方法呢?可以问一下吗g++不用这个技

c++ - 将私有(private)部分保留在 c++ header 之外 : pure virtual base class vs pimpl

我最近从Java和Ruby切换回C++,令我惊讶的是,当我更改私有(private)方法的方法签名时,我不得不重新编译使用公共(public)接口(interface)的文件,因为私有(private)部分也在.h中文件。我很快想出了一个解决方案,我想这对Java程序员来说是典型的:接口(interface)(=纯虚拟基类)。例如:香蕉树.h:classBanana;classBananaTree{public:virtualBanana*getBanana(std::stringconst&name)=0;staticBananaTree*create(std::stringcons

c++ - C++ 算术 boost header 的使用

我一直在尝试使用一组模板来确定给定C++中两种原始类型的正确boost类型。这个想法是,如果您定义一个自定义数字模板,您可以使用它们来确定返回类型,例如,基于传递给模板的类的operator+函数。例如://CustomnumericclasstemplatestructComplex{Complex(Treal,Timag):r(real),i(imag){}Tr,i;//Otherimplementationstuff};//GenericarithmeticpromotiontemplatetemplatestructArithmeticPromotion{typedeftype

c++ - Xcode 找不到#Include<> header

我正在尝试让Xcode导入Irrlicht的头文件。#include它说“Irrlicht.h。没有这样的文件或目录”。是的Irrlicht.h有一个大写的I,即使#include是小写的。无论如何,我在Xcode项目的header搜索路径中添加了“/lib/irrlicht-1.6/include”,但它仍然找不到它。我试过的唯一有效的方法是:#include"/lib/irrlicht-1.6/include/irrlicht.h"虽然这有点荒谬,#include应该可以,但我不明白为什么它不起作用。更新(这里有关于错误的更多详细信息):/lib/PAL/pal_benchmark