草庐IT

expose_used

全部标签

c++ - 注册表模式 : to use or not to use

我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和Pane的弱指针。应用程序的一般结构如下所示。该应用程序有一个MainFrame顶层窗口,其中有几个子Pane。可以有许多基于TabPane类型的选项卡。我需要从我的所有TabPane选项卡中引用ParamsPane面板,因此我需要一个指向要存储在某处的ParamsPane对象的指针。可以有很多选择,但最明显的是(1)将指针存储在Application单例对象中或(2)创建一个简单的注册表类。像这样的东西:classRegistry{public:staticMainApp*application;staticMain

c++ - 如何在 Solaris 8 SPARC 上启用 _GLIBCXX_USE_C99?

我已经为Solaris8sparc构建了gcc4.6.1。我正在编译一些使用boost::lexical_cast(boost1.48)的代码,但出现此错误:boost/math/special_functions/sign.hpp:Infunction'intboost::math::detail::signbit_impl(T,constboost::math::detail::native_tag&)'error:'signbit'isnotamemberof'std'(对于fpclassify、isfinite、isnormal、isinf、isnan也有类似的错误)我查看了c

C++ 二进制文件和迭代器 : getting away with a 1:1 using ifstreambuf_iterator?

Thisanswer指出C++不太适合二进制文件的迭代这一事实,但这是我现在需要的,简而言之,我需要以“二进制”方式对文件进行操作,是的,所有文件都是二进制的,即使是.txt的,但我正在写一些对图像文件进行操作的东西,所以我需要读取结构良好的文件,数据是否以特定方式排列。我想读取数据结构中的整个文件,例如std::vector所以我几乎可以立即关闭文件并处理内存中的内容,而无需再关心磁盘I/O。目前,根据标准库对文件执行完整迭代的最佳方法是std::ifstreamifs(filename,std::ios::binary);for(std::istreambuf_iterator>i

c++ - LLDB 为局部变量给出 "use of undeclared identifier"错误

在以下函数中,我无法在LLDB中看到“recordMap”。for循环打印键,recordType设置正确,但'precordMap'给出错误“使用未声明的标识符”。我可以在LLDB中看到变量“recordType”,所以我在正确的范围内。当我在LLDB中输入“recordMap”时,它会自动完成,就好像它就在那里一样。我已将调试和发布的优化设置为“无”。这可能是什么!?voidMezNetworkController::showRecord(std::maprecordMap){for(autoitem:recordMap)printf("KEY:%s\n",item.first.c

c++ - 场景 : Global variables in DLL which is used by Multi-threaded Application

几个月前,我遇到了一个人(在orkut上)问的这个有趣的场景。虽然,我已经针对这个问题提出了一个“不可移植”的解决方案(已经用小代码对其进行了测试),但仍然想知道你们有什么要说的和建议的。假设,我创建了一个DLL,导出一些功能,用C++编写,用于单线程客户端。这个DLL声明了很多全局变量,一些可能是const变量(只读),其他的是可修改的。无论如何,后来情况发生了变化,现在我希望同一个DLL与多线程应用程序一起工作(无需修改DLL);这意味着,多个线程从DLL访问函数和全局变量,并修改它们……等等。所有这些都可能导致全局变量持有不一致的值。所以问题是,我们能否在客户端代码中做一些事情来

c++ - 将 using tr1::shared_ptr 放在 header 中的命名空间 std 中是否合法?

使用std::tr1::shared_ptr作为std::shared_ptr放置using指令是否合法和良好的编程风格标题?像这样:namespacestd{usingtr1::shared_ptr;}我知道污染整个命名空间是不好的,但这种情况呢?有没有隐藏的陷阱?目标编译器是VS2008,但也希望与更高版本兼容。 最佳答案 从技术上讲,如果您这样做,标准表示您进入了未定义行为的领域:17.6.4.2.1命名空间标准[namespace.std]1ThebehaviorofaC++programisundefinedifitadds

c++ - 在哪里放置 using 声明

关于using声明的推荐做法是什么(例如usingstd::vector;)?它应该位于cpp/cc文件的顶部还是仅在其使用范围内? 最佳答案 一般来说,限制它的范围会更好,但它需要在源文件中添加大量代码才能在实践中发挥作用。 关于c++-在哪里放置using声明,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8853147/

c++ - 通过 using 声明将一个函数作为好友合法吗?

以下(LiveWorkspacehere)被GCC4.7.2、GCC4.8.0和ICC13.0.1拒绝。namespaceA{namespaceB{voidC();}usingB::C;}classD{friendvoidA::C();};此外,它会使Clang3.2(!)崩溃。我已经提交了错误报告和patch已经,对于崩溃错误,但我不能100%确定这段代码是否真的有错误,因为我在§7.3.3[namespace.udecl]或中找不到任何东西>§11.3[class.friend]明确解决了这种情况,但也许我错过了各种名称说明符术语之一的定义。此外,似乎所有四个编译器都接受以下(Li

c++ - 提升 : is it safe to use multiple recursion in async calls?

我是asio框架的新手,所以请多多关照。我调查了几个boostasio示例,发现人们使用这样的异步调用:voidread(){async_read(socket_,boost::asio::buffer(&user_[0],user_.size()),boost::bind(&Connection::handle_user_read,this,placeholders::error,placeholders::bytes_transferred));}voidhandle_user_read(...){...read();...}我认为这段代码不安全,因为它使用了多重递归。所以当因为调

c++ - "using"与基类名称更改访问有效吗?

我的friend给我看了下面的代码structA{virtualvoidf()=0;virtualvoidg()=0;};structAInternal:A{virtualvoidf(){/*...*/}virtualvoidg(){/*...*/}};他使用AInternal作为实现大部分(如果不是全部A)的内部类。然后他从AInternal继承,但由于他希望AInternal保持不可访问(因为它是一个实现细节),他继承了protected(根据...实现)。他还做的是使用基类名称使A可访问(默认情况下它是protected,因为AInternal也被继承保护)structC:pro