草庐IT

c++ - 是否可以根据模板类型参数的嵌套 typedef 的存在来专门化模板定义?

我有一个模板,templateclasswrapper,我想根据typenameT::context_type的存在进行专攻.如果typenameT::context_type被声明,然后wrapper的构造函数和赋值运算符重载实例化应该接受强制typenameT::context_type范围。此外,wrapper对象将在成员数据中存储“上下文”。如果typenameT::context_type不存在,则重载wrapper的构造函数和赋值运算符将减少一个参数,并且不会有额外的数据成员。这可能吗?我可以在不更改config1的定义的情况下编译以下代码吗?,config2,和main(

c++ - 应该用 typedef 触发 static_assert 吗?

我注意到当实例化为typedef时,类模板中的静态断言不会被触发。#includetemplatestructtest_assert{static_assert(std::is_same::value,"shouldfail");};typedeftest_assertt;这段代码编译没有错误。如果我尝试创建一个实例,则断言失败:tobj;//error:staticassertionfailed:"shouldfail"最后,如果我将条件替换为false,即使我不实例化类模板,断言也会失败:templatestructtest_assert{static_assert(false,"

c++ - 使用 typedef 的多指针声明

在C++中,如果我们想声明多个指针,我们会这样做:int*a,*b,*c;我们必须在其中放置一个星号*在他们每个人面前。如果我写这段代码:typedefint*ptr;ptra,b,c;?它们都是指针,还是只是一个指针? 最佳答案 不,typedef不仅仅是文本替换的问题(就像宏一样)。typedefint*ptr;为int*类型引入一个新名称“ptr”。如果你写ptra,b,c;所有a、b和c都将具有相同的类型,int*。注意constptrp;同样不等于constint*p;因为ptr是指针类型,const适用于指针;等价于in

C++ typedef a std::pair 然后使用typedef声明一个映射

假设我有这个typedeftypedefstd::pairMyType;那么,如果我也想使用MyType创建map,我该怎么做呢?我不想重新键入这对中的两种类型,例如:mapmyMap;我想要这样的东西:mapmyMap;有没有办法使用我的typedefMyType而不是重新键入类型来做到这一点? 最佳答案 简单...std::mapmyMap;参见http://en.cppreference.com/w/cpp/utility/pair示例程序位于coliru 关于C++typedef

c++ - 什么是 C++11 扩展 [-Wc++11-extensions]

我需要一些帮助来了解此错误发生的位置:warning:in-classinitializationofnon-staticdatamemberisaC++11extension[-Wc++11-extensions]这是它来自的代码部分:typedefstructHand{boolstraight=false;boolflush=false;boolfour=false;boolthree=false;intpairs=0;}Hand; 最佳答案 这不是错误,这是警告。它告诉您,您只能初始化以C++11标准(之所以这样称呼是因为它于

c++ - 在模板 vector 上返回迭代器

我一直在四处寻找类似的东西,但找不到(或者我找到的东西没有帮助)。我正在尝试能够在模板类的vector上使用迭代器,返回它并在类外部使用它,如下面的代码所示。#include#includeusingnamespacestd;namespacens{templateclasstest{private:vectorcontainer;public:typedefvector::iteratoriterator;vector::iteratorbegin(){returncontainer.begin();}vector::iteratorend(){returncontainer.end

c++ - 写很多类型别名是不好的做法吗?

我发现自己编写了很多类型别名(typedef)以使代码更易于更改,但同时有些事情告诉我要避免这样做,因为它会给将要与之合作的人造成很多困惑/在我的代码上。也许不是最好的例子,但看看here.我还要举一个最近的例子;这些是我在构建XML解析器时摆弄的一些类:namespaceXML{structAttribute{typedefstd::stringname_t;typedefstd::stringvalue_t;Attribute(constname_t&name,constvalue_t&value="");name_tname;value_tvalue;};}namespaceXM

c++ - 向 std::vector 或 typedef 添加自定义方法

所以我有以下代码可以在vector中“搜索”对象的字符串。#include#include#include#include#includestructmigObj{migObj(conststd::string&a_name,conststd::string&a_location):name(a_name),location(a_location){}std::stringname;std::stringlocation;};intmain(){typedefstd::vectormigVec;migVecv;v.push_back(migObj("fred","belfast"));

c++ - 别名模板的部分特化

别名模板的部分特化是不允许的:例如,尝试发挥创意,会在clang中产生此错误:templateusingunwrapped_future_t=T;templateusingunwrapped_future_t>=typenamefuture::value_type;^~~~~~~~~~~>error:partialspecializationofaliastemplatesisnotpermitted为什么不允许这样做? 最佳答案 您可以在originalproposal中找到答案别名模板:2.2TheMainChoice:Spec

c++ - STL + typedefs 与 OOP,最佳实践?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我“长大”学习使用OOP设置数据结构。但现在随着我对C++、STL和Boost的了解越来越多,我发现我的许多数据结构需求可以通过将STL类组合成更复杂的组合来满足,例如:typedefstd::map>CSVData;显然,当我需要混合数据类型时,这有一些限制,但通常我发现自己在避免OOP时可以使用这些STL组合,因为它们的简单性。这是一个普遍的进步吗?