问题标签 [template-specialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从未调用过专门的 C++ 模板方法
还有另一个我无法解决的模板专业化问题:
终端日志.hh
terminallog.hh 继续(编辑感谢评论)
这编译得很好,没有错误。但是,当我尝试执行以下操作时:
它总是向我打印数组的指针地址。换句话说,专门的模板
永远不会被调用。我还通过额外的 cout 验证了这一点。无论我尝试什么,程序总是在调用
而不是专业。显然我的代码中必须有一个错误,但是我找不到它。
c++ - 重载的函数模板从未被调用
我喜欢模板,如果我能理解它们,至少我会这样做;-)。我使用模板实现了一个重载运算符。我现在正在尝试专门化函数调用。
这是我所做的:
现在我正在尝试类似的东西
编译得很好。但是执行代码时,它会打印 test3 的地址,而不是所有元素。我得出结论,编译器认为,
是更好的匹配。但是我不知道该怎么做。我的代码中的错误在哪里?为什么是
从来没有打电话?
c++ - 类模板部分专业化
以下代码编译成功,我不明白为什么:
部分特化不是意味着我们可以将类用于某些特定的数据类型,我们在特化中指定了这些类型吗?
这里没有专门的char类,如果要编译任何类型的数据类型,那么专门化的目的是什么?
java - Java 泛型,支持“专业化”吗?与 C++ 模板的概念相似之处?
我知道如何使用C++ 模板——不是专家,请注意。使用Java 泛型(和 Scala,就此而言),我遇到了困难。也许是因为我试图将我的 C++ 知识转化为 Java 世界。我在其他地方读到,“它们完全不同:Java 泛型只是语法糖节省演员,C++ 模板只是一个美化的预处理器”:-)
我很确定,两者都是一个有点简化的视图。因此,为了了解大和细微的差异,我尝试从Specialization开始:
在C++中,我可以设计一个模板(函数类),它作用于支持我所需操作的任何类型T
:
现在,这可能会将plus()
操作添加到任何可以add()
.[note1][1]的类型
因此,如果T
支持add(T)
我的模板就可以工作。如果没有,只要我不使用plus()
. 在 Python 中,我们称之为“鸭子类型”:*如果它的行为像鸭子,像鸭子一样嘎嘎叫,它就是鸭子。*(当然,使用 type_traits 会稍微修改一下,但只要我们没有概念,这就是 C++ 模板的工作方式,对吧?)
我想,Java 中的泛型也是这样工作的,不是吗?通用类型 I 设备用作“模板”,如何对我尝试放入的任何内容进行操作,对吗?据我了解,我可以(或必须?)对类型参数设置一些约束:如果我想add
在我的模板中使用,我必须将类型参数声明为implement Addable
. 正确的?所以,没有“鸭子打字”(无论好坏)。
现在,在C++中,我可以选择专注于没有 的类型add()
:
即使所有其他类型仍然可以使用“默认”实现,现在我添加了一个特殊的MyX
——没有运行时开销。
是否有任何具有相同目的的Java 泛型机制?当然,在编程中一切都是可行的,但我的意思是在概念上,没有任何技巧和魔法?
c++ - 无法专门化结构
为什么这不起作用?
c++ - 在运行时选择正确的模板特化
我有
在代码中的不同位置进行专业化。我如何才能在运行时调用正确a<i>::f
的i
已知值?
我不想i
在一个大的switch
.
编辑:
我想到了类似的东西
但它崩溃了(我错过了强制实例化的东西吗?),我不喜欢那个 dummy 不是static const
(并且使用内存),当然这arrsize
比必要的要大。
实际问题:只有在运行时generate (int i)
调用为给定a<i>::generate ()
生成类实例的函数。设计(类)是给定的,它们继承自基类,并且可以随时在代码中的任何地方添加更多的专业化,但我不想强迫每个人手动更改我的,因为这很容易被忘记。a<i>
i
a<i>
generate (i)
c++ - 具有非类型参数的成员函数的部分特化
我有一个带有类型和非类型模板参数的模板类。我想专门化一个成员函数,我发现,如下例所示,我可以做一个完整的专门化。
但是,这种部分专业化不会编译。
有没有办法实现我正在尝试的任何人都知道?我在 MSVC 2010 中试过这个。
c++ - 模板重构
假设我们有几种类型的元素,我们想为每种类型创建一个“管理器”。管理器负责任何元素的创建、激活/停用和删除(我们假设用户在不使用管理器的情况下不会创建/销毁这些元素的实例。一个非常简单的代码示例如下所示:
现在让我们想象一下,对于一组对象,除了基本操作之外,我们还需要做一些缓存。对于该类型的子组,我们可以像这样定义另一个“管理器”:
很明显,除了三行标记为 so 之外,两位经理完全相同。我如何重构这两个模板?我们在编译时就知道特定类型是否可缓存。请注意,析构函数中还有另一行。任何可行的建议(虚拟继承、模板专业化、SFINAE ......)都将受到欢迎。
c++ - __stdcall 函数指针的模板部分特化
上面的代码在 Visual C++ 2010 中给了我以下错误:
如您所见,__stdcall
修饰符的问题。这是编译器错误吗?