草庐IT

Templates

全部标签

c++ - clang 和 gcc 在处理模板生成和静态 constexpr 成员时的不同行为?

考虑以下程序(抱歉太长了;这是我能想到的表达问题的最短方式):#include#include#includeusingnamespacestd;std::vector&test_vector(){staticstd::vectorrv;returnrv;}templateclassRegistrarWrapper;templateclassRegistrar{Registrar(){auto&test_vect=test_vector();test_vect.push_back(std::type_index(typeid(T)));}friendclassRegistrarWrap

c++ - 在 C++ 中初始化模板时将函数传递给模板对象

我正在尝试为HashMap编写一个实现,除了iostream、string和cassert之外,我不允许使用stdlib中的任何内容。它需要是通用的,因此填充桶的值可以是任何类型。我为此需要模板,但无法设法以任何方式传递哈希函数。这将是头文件:templateclasshashTable{public:hashTable(intsize){//Createsanemptyvectorofsizeonthetable}define(Valuev){loadsvalueinVector[hashFunction(v)];}...private:Vectorwithalltheelement

c++ - 模板的 typedef 包括 char[][] - 适用于 VS2008 但不适用于 gcc

我有一些正在使用的库代码。它在VisualStudio(2008)下编译和工作,但不是GCC(v4.8.4.)在标题中我们有:externconstcharmenu_styles[MENU_COUNT][MAX_LEN];typedefSysEnumMenuStyleEnum;SysEnum在哪里(在另一个文件中定义):templateclassSysEnumgcc遇到错误:error:‘menu_styles’cannotappearinaconstant-expression我完全同意。(此外,它是constchar*转换为char*)。我希望VS2008只是用constchar*

c++ - c++-通过抽象模板基类接口(interface)指针访问派生类方法,而接口(interface)中没有显式类型

这是我的第一篇文章。我花了数小时检查问题的解决方案,在SO上逐个链接地搜索链接,但没有一个描述我的问题的确切信息(我能得到的最接近的是this和this)。所以,让我们开始工作吧!说明:我必须实现一组专门的类,每个类都可以存储其类型的链接列表。另外(棘手的部分),我必须实现一个集合管理器,以向集合中添加更多专业类不会影响其代码的方式。让我解释一下我到目前为止所拥有的。classIList{public:virtualIList&operator+(IList&)=0;virtualvoidprint()=0;virtualintg_Size()const=0;//perfecttill

c++ - 确定模板中临时文件的大小

我有一个模板类需要能够在一个类型的两个实例之间进行插值。所以我的类调用一个名为interpolate的用户提供的函数,具有以下签名:templateTinterpolate(uint32_tdistance,constT&from,constT&to);此处,distance从0到0xFFFF。现在,我想为T的常见类型提供合理的实现,例如uint32_t。所以我写了一个示例实现(忽略它只为签名类型实现):templateinlineautointerpolate(uint32_tdistance,constT&from,constT&to)->std::enable_if_t::val

c++ - 每当成员变量可以由可变参数构造时,有条件地启用构造函数

我有一个类foo使用模板参数Tuple我想提供一个可变参数构造函数来初始化一个成员变量m_elements类型Tuple,每当表达式m_elements{static_cast(std::forward(elements))...}已定义。我们可以通过以下方式做到这一点:templatestructfoo{usingvalue_type=typenameTuple::value_type;template(std::declval())...})>foo(Elements&&...elements):m_elements{static_cast(std::forward(element

c++ - `std::pair` `second` 具有不完整的类型与 `unordered_map` 树

我正在审查我的一些旧代码,我看到代码使用指针来实现Variant的树。对象。它是一棵树,因为每个Variant可以包含unordered_map的Variant*.我查看了代码,想知道为什么它不只是使用值,std::vector,和std::unordered_map,而不是Variant*.所以我继续修改它。除了一件事似乎没问题,我得到了errors:/usr/local/include/c++/6.1.0/bits/stl_pair.h:153:11:error:'std::pair::second'hasincompletetype_T2second;///@csecondisa

c++ - 使用C++模板编程提取任意结构的字段类型

如果我定义一个具有任意数据类型的结构,例如:structcustom_type{inta;floatb;charc;float*d;//etc...};是否有一种通用模式使用模板编程(C++)来提取此结构的字段类型并在编译时将它们映射到某些类型特定的代码处理程序?一些上下文:我正在创建一个api,它允许客户定义他们自己的任意自定义类型,并且仍然允许它们与我拥有的用于管理和内省(introspection)这些类型的底层系统集成,进行自动内存管理和其他内务处理.“包装”模板或其他机制将允许这种集成而底层系统对定义自定义类型的头文件一无所知。从客户端的角度来看,代码访问结构以正常方式,但模

c++ - 当涉及参数包时,我可以依赖具有默认值的参数类型被推断为空包这一事实吗?

考虑一个例子:#include#include#includetemplatevoidfoo(std::tuplet,std::index_sequence={}){if(sizeof...(Ts)!=sizeof...(Is)){foo(t,std::make_index_sequence{});return;}(std::cout(t));}intmain(){foo(std::make_tuple(1,2,3));}我假定函数的第二个参数的类型foo默认情况下将推导为std::integral_sequence因此我不必创建辅助函数来使用Is...元组元素的索引,但可以调用foo

c++ - 指定类基类的 C++ 模板参数的用途和缺点?

背景最近我一直在考虑如何设计一个特定的软件,有一次我制作了以下部分:templateclassFoo:publicvirtualMixins...{/*...*/};我的想法是能够根据用户的需要使用额外的属性或行为来扩充基本类。假设一个应用程序需要使用带有标识号的Foo。也许其他一些应用程序需要能够用颜色来谈论Foo。这些需求可以通过添加以下类来满足:classHasID{intm_id=-1;public:intgetID(){returnm_id;}voidassignID(intid){m_id=id;}};classHasColor{public:intcolor=0;};问题