草庐IT

c++ - 这是 "new auto(enum_type)"的 Microsoft VC++ 2010 编译器错误吗

环境:MicrosoftVisualStudio2010withSP1Preminum(10.0.40219.1SP1Rel),WindowsXPSP3VC10编译器支持auto关键字,但推导的类型相关信息对于枚举似乎并不总是正确的。例子:#includeenumfruit_t{apple=100,banana=200,};intmain(){constautopa=newauto(banana);constautopb=newfruit_t(banana);static_assert(std::is_same::value,"notsame!");deletepb;deletepa;

c++ - 使用模板转换运算符解决歧义

我不得不做一个类似的代码:#includetemplatestructprobe{template::value&&!std::is_const::value,int>=0>operatorT&()const;template::value&&!std::is_const::value,int>=0>operatorT&&();template::value,int>=0>operatorTconst&()const;template::value,int>=0>operatorTconst&&()const;};structsome_type{};structother_type{}

c++ - 非模板类中模板方法中的dll和静态变量

我花了几天时间搜索我的问题,但找不到任何可行的解决方案。我有一个名为ServiceEventHub的类,它负责在我的应用程序中调度事件。该代码的灵感来自于我在网上找到的实现事件聚合器的内容。该应用程序是一个插件引擎,可动态加载不同的dll(插件)。此类是由驻留在应用程序(.exe)中的引擎提供的服务。问题在于该类依赖于静态变量来跟踪发出和注册的不同“事件”。(事件只是在通用头文件中定义的结构)。据我了解,由于Windows上默认不导出符号这一事实,静态变量在应用程序和dll中不是相同的实例。正如您所想象的,引擎和插件之间的“事件类型”并不相同,并且它的行为与预期不同。这是我第一次在Wi

C++递归模板类型推导

我有兴趣学习一些关于模板元编程的知识。在下面的代码中,我尝试使用一些模板递归找到一个足够大以容纳N位的无符号整数类型,该类型在编译时指定。templatestructNextIntegralType{};templatestructNextIntegralType{typedefunsignedchartype;};templatestructNextIntegralType{typedefunsignedshorttype;};...Moretype'iteration'here...templatestructFindIntegralType2{typedefstd::condit

C++ 模板 "class type"错误

我一直在研究一个链表模板类来对各种变量做同样的事情,并设法解决了大部分问题。除了编译时,我得到这些:g++-Wall-otemplate_testtemplate_test.cppInfileincludedfromtemplate_test.cpp:1:0:LinkedList.h:50:11:error:declarationof‘classType’LinkedList.h:7:11:error:shadowstemplateparm‘classType’LinkedList.h:51:30:error:invaliduseofincompletetype‘classLinked

c++ - 有没有办法推断函数指针模板参数的值?

C++允许非类型模板参数为指针,包括函数指针、类型。我最近问了一个question关于这有什么用,这是对oneoftheanswers的跟进.是否可以从作为相关函数指针的函数参数中推断出函数指针模板参数的值?例如:usingVoidFunction=void(*)();templatevoidtempl(VoidFunction);...voidfunc();//aVoidFunction...templ(func);//works,butIhavetospecifythetemplateparameterexplicitlytempl(func);//有没有办法让这种扣除发生?从编译

c++ - gcc 的 std::bind 在哪里将参数复制到数据结构中?

为了了解std::bind分配内存的情况,我查看了thisanswer,这给出了一些直觉,但我想要更详细的了解,所以我去查看了gcc的源代码。我正在检查followingsourcecode对于来自C++标准库的gcc实现的std::bind。/***@briefFunctiontemplateforstd::bind.*@ingroupbinders*/templateinlinetypename_Bind_helper::value,_Func,_BoundArgs...>::typebind(_Func&&__f,_BoundArgs&&...__args){typedef_Bi

c++ - 在 C++ 中,枚举的大小是否必须等于其基础类型的大小?

我经常假设枚举的大小与其基础类型的大小相同。但它是标准强制要求的吗?标准(C++14,n4296)表示每个枚举都有一个基础类型(7.2/5)。该标准还表示对象表示为字节序列,并且对象的大小与其表示有关:3.9/4TheobjectrepresentationofanobjectoftypeTisthesequenceofNunsignedcharobjectstakenupbytheobjectoftypeT,whereNequalssizeof(T).5.3.3/1Thesizeofoperatoryieldsthenumberofbytesintheobjectrepresenta

c++ - 为什么 boost::call_traits<double>::param_type 是 "const double&"而不是 "double"

我在win32program@windows7机器上使用代码“boost::call_traits::param_type”。令我惊讶的是,它不是“double”而是“constdouble&”。我认为所有原始类型都适合对函数参数使用“按值传递”,这不是常识吗?因为很多人会使用is_pod来判断是否使用引用,不是吗? 最佳答案 根据doc,该优化显然只适用于“小型”内置类型。.快速浏览source,看起来“小”类型被认为是满足sizeof(T)的类型.在32位机器上,这显然不包括double.在某些情况下,将参数传递为double可

c++ - 了解一些 C++ 编码实践

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我目前正在尝试了解以下代码(http://pastebin.com/zTHUrmyx)是如何工作的,我的方法目前是在调试中编译软件并使用gdb单步执行代码。但是,我遇到了“步骤”并不总是告诉我发生了什么的问题。我特别不清楚的是我无法进入的EXECUTE{...}。我如何着手了解代码的作用?1/*2Copyright2008BrainResearchInst