草庐IT

c++ - 如何强制 xcode 使用正确的 iostream header C++

xcode4.2osx10.7当我将我的包含设置为如下所示时:#include#include我从位于/opt/local/include/boost/tr1/tr1的文件中得到以下错误LexicalorPreprocessorIssue'boost/tr1/detail/config_all.hpp'filenotfound/opt/local/include/boost/tr1/tr1/iostream文件的内容://(C)CopyrightJohnMaddock2005.//Use,modificationanddistributionaresubjecttothe//Boost

c++ - 我可以在编译时强制执行此运算符调用计数要求吗?

我有一个类,在接口(interface)方面,就这么简单:structFoo{inlineFoo&operator然后我可以按以下方式使用它:Foofoo;foo现在我想限制这个运算符的使用。例如,我希望它在序列点之间被调用偶数次。我目前使用内部代理类来解决这个问题。创建一个临时对象,在控制序列的末尾销毁它并检查该运算符被调用了多少次:structFoo{inlineFoo():m_count(0){}private:structFooProxy{friendstructFoo;inline~FooProxy();inlinestructFoo&operator有一些注意事项,但它主要

c++ - 强制处理类中的所有成员变量

是否有一个概念可以确保向现有类添加成员会产生某种错误/警告,以防实现者忘记扩展应处理所有成员的方法?如果一个类实现了几个必须接触所有元素的方法(例如导入/导出),那么很容易忘记一个或多个方法来适应。编译器不会识别它,并且在很多情况下行为会符合预期(当然除了你有正确的测试。)我目前的尝试是在每个可能被遗忘的方法中测试类的大小。但是当然这不容易阅读,不安全并且不独立于编译器/平台/构建类型(所以我不喜欢它)。classC{intelement1;intelement2;intelement3;实现可能隐藏在不同的/大文件中:voidC::import_me(){assert(sizeof(

c++ - 为什么我无法阻止不受欢迎的 C 风格强制转换进行编译?

有一个我无法阻止编译的不良C风格转换。不受欢迎的强制转换执行C风格的强制转换,从某个类的对象到某个其他类的非常量引用。这些类(class)是无关的。同时,我喜欢支持从同一类的对象到const引用的C风格转换。我正在提供一个公共(public)转换运算符来支持理想的转换。在这种情况下,似乎无法阻止不受欢迎的转换。转换为非常量引用无法构建(“Sandbox::B::operatorSandbox::A&()”(在第30行声明)不可访问*),不幸的是转换为const引用要么失败(错误:不止一个从“Sandbox::B”到“constSandbox::A”的转换函数适用:函数“沙盒::B::o

c++ - 强制在堆栈中而不是全局分配 char[] (string)

我试图强制编译器在堆栈中分配内联字符串:此代码分配.rdata部分中的字符串:foo("test");当这段代码在栈中分配字符串时:charszt1[]="test1";foo(szt1);这正是我想要强制执行的。如何强制编译始终在堆栈中分配数组?我正在使用gcc。谢谢 最佳答案 没有好的方法可以做到这一点,而且可能没有太多好的理由需要这种行为。如果您不希望该字符串存在于数据段中,最接近的做法是分配一个char的自动数组并将字符分配给它,一次一个。charhello[6]={};hello[0]='h';hello[1]='e';h

c++ - 强制线程在销毁前离开对象

在使用多线程时,我经常遇到以下问题:我有一个对象,比如网络接收器(但可以是任何东西)。以及获取数据的函数。现在有时根本就没有数据,你想让线程等待获取它的数据。阻塞调用,非常类似于Berkeley套接字及其派生实现所使用的。原理很简单:现在当然还有其他实现方法。但我通常使用C++11实现如下:对象A在专用于此任务的单独线程上调用对象B中的函数。ObjectB使用std::condition_variable构造来阻塞线程,直到数据被实际获取。对象A将数据放入队列中,由主线程读取。现在我的实际问题出现在objectB的销毁上,如果它必须在objectA之前被销毁(返回nullptr,或在阻

c++ - 强制内联递归函数

考虑定义阶乘函数的经典方法:#include__attribute__((always_inline))inlineintfactorial(intn){if(n==1){return1;}else{returnn*factorial(n-1);}}intmain(){printf("value%d",factorial(7/*guaranteedtonotoverflowint*/));}我正在强制我的编译器(gcc)内联阶乘函数。那应该会导致问题。gcc无误地忽略了我的强制内联。这是预期的吗? 最佳答案 来自GCC的文档:GCC

c++ - 强制使用预定义宏的 gcc 标志

我的问题如下。我正在尝试为mips构建一个项目。当我从它的存储库下载它时,构建它没有问题,但是当我将它作为一个更大项目的一部分构建它时,我收到以下错误:error:expected‘,’or‘...’beforenumericconstant我发现这是一个问题,因为某些变量称为mips,而同一变量在gcc编译器中被定义为预定义宏。#definemips1我验证了它:mipsel-linux-gnu-g++-dM-E-所以,我的问题是,是否有人知道是否有特定的编译器标志或其他什么强制使用此宏?奇怪的是,当我从存储库下载相同的代码时没有构建问题。这两个项目都是使用相同的工具链构建的,我已经

c++ - 如何强制编译器显示隐式构造函数

gcc或clang有“-E”选项来运行预处理器并显示所有宏是如何展开的,对于隐式生成的方法我需要这样的东西。有没有办法强制gcc或clang为每个类打印隐式创建和删除的构造函数/析构函数/赋值运算符? 最佳答案 您可以使用模板类型特征作为从某些类型中提取此类信息的变通方法。这无法区分某些内容是被显式删除还是隐式删除,但是您可以肯定地知道您是否没有显式删除,例如#include#includestructA{A(constA&)=delete;};intmain(){std::cout将产生false,true,false,例如,当复

c++ - 如何强制 32 位版本的远程桌面客户端在 64 位 Vista 上运行?

我们需要在64位Vista上运行32位版本的远程桌面客户端,因为我们的部分产品与其集成,并通过虚拟channel与终端服务器端应用程序通信。集成加载了一些第三方32位驱动程序,并且无法在64位进程中加载​​32位dll。通常很容易从命令行运行32位版本的Windows应用程序,例如运行窗口:C:\Windows\SysWOW64\Notepad.exe您可以通过检查任务监视器\进程来判断该进程是32位的,因为它的文件名旁边会有一个*32。然而,远程桌面客户端(mstsc.exe)并不想玩球。它始终从C:\Windows\System32\mstsc.exe运行64位版本,无论我如何启动