问题标签 [partial-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.

0 投票
4 回答
1726 浏览

c++ - 调用专用模板函数时强制编译时错误

我有一个模板功能。只要参数不是指针类型,它就具有明确定义的语义。如果有人调用此函数并传递类型指针的参数,我想强制编译时错误。我可以轻松编写通用(合法)模板和相应的部分专业化(非法)版本。我只是不知道如何将错误从函数定义推迟到函数调用。

0 投票
4 回答
527 浏览

c++ - 是否可以从某个对象的中间部分取消分配内存并“拆分”它?

例如,我有一个包含 200 个整数的数组。我想要做的是将它转换为两个 80 个整数的数组,删除其间的 40 个整数。目标当然是使用现有内存块而不分配两个长度为 80 整数的新数组并从第一个数组复制,我想要的是将初始数组从 80 剪切到 120 并将剩下的视为两个单独的数组。

移动语义使用类似的低级方法来避免不必要的右值复制,所以我的问题是是否有一种低级方法可以实现类似的效果,但将已经存在的数据分配给多个对象。

例如,将指针分配到剪切位置和新元素开始的原始内存地址,强制它们充当使用相同数据的数组,已经分配并由初始数组填充?

当然,我也可以删除初始数组并获取其地址并使用它将其内存区域分配给新元素,但是是否可以告诉 C++ 在哪个确切地址上分配新对象?而且,有没有办法保证初始数组的数据在删除和将同一内存区域重新分配给新对象之间不会被破坏

我读过的任何关于 c++ 的书籍都没有这种方法,但我觉得很可能存在一些低级技巧来达到预期的结果。

0 投票
2 回答
198 浏览

c++ - 当我尝试对函数模板进行部分特化时,为什么我的程序无法运行?

我是模板元编程的初学者,试图实现生成多个版本的相似但略有不同的代码:

完全专业化效果很好:

: 一些垃圾

:这是我的模板参数一:0 和二:1

但是像下面这样的部分专业化失败了:

错误:错误 C2768:“DoSomething”:非法使用显式模板参数

(在这种情况下,对通用模板的主体进行了注释,尽管它没有任何区别)

这种专业化在所有样本中都适用于部分专业化,但对我不起作用。这让我很困惑。

非常感谢任何建议

0 投票
1 回答
2233 浏览

c++ - 部分模板专业化歧义

我不明白为什么 main 中的陈述是模棱两可的。

不是X<int, T*, 10>最专业的模板吗?这是来自http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fpartial_specialization.htm的示例

0 投票
2 回答
1905 浏览

c#-4.0 - Expression trees vs IL.Emit for runtime code specialization

I recently learned that it is possible to generate C# code at runtime and I would like to put this feature to use. I have code that does some very basic geometric calculations like computing line-plane intersections and I think I could gain some performance benefits by generating specialized code for some of the methods because many of the calculations are performed for the same plane or the same line over and over again. By specializing the code that computes the intersections I think I should be able to gain some performance benefits.

The problem is that I'm not sure where to begin. From reading a few blog posts and browsing MSDN documentation I've come across two possible strategies for generating code at runtime: Expression trees and IL.Emit. Using expression trees seems much easier because there is no need to learn anything about OpCodes and various other MSIL related intricacies but I'm not sure if expression trees are as fast as manually generated MSIL. So are there any suggestions on which method I should go with?

0 投票
1 回答
623 浏览

c++ - C++:模板:部分专业化:打印一切模板

大家好!

具有以下代码:

编译器:MSVCPP10

编译器输出:

我被困住了。帮助我完成部分专业化。

谢谢!

0 投票
1 回答
625 浏览

c++ - 带有地图的部分类模板专业化

我是一名新的 C++ 程序员,前段时间我学习了 Java 和 ANSI C,并决定试一试。

好吧,我喜欢 C++,但我不喜欢迭代器的工作方式:

在 java 中,您可以将整个容器设为私有并为其迭代器实现一个 getter 函数,并且迭代器有一个方法hasNext(),该方法根据它是否已到达容器的末尾返回一个布尔值。

我发现在 C++ 上做类似事情的唯一方法是编写 2 个 getter,iteratorBegin()并且iteratorEnd(),它返回一个对应于第一个和最后一个位置的迭代器,递增返回的迭代器iteratorBegin()并将其与 进行比较iteratorEnd(),允许我迭代容器直到最终已到达位置

但是,我只想使用一个 getter 方法,我想:“让我们创建自己的迭代器类”

到目前为止一切顺利,我已经用集合和列表成功地完成了它,但我似乎无法用地图制作它,这是困扰我的代码:(该类在单独的 .h 中定义,这称为 customIterator .cpp)

编译专用方法时,它说:错误:'map'未在此范围内声明,即使我#include <map>在文件顶部添加

我正在使用带有代码块的gcc 版本 4.4.5 (Debian 4.4.5-8)

拜托,我需要一些帮助。

感谢您的关注!

0 投票
2 回答
694 浏览

c++ - c++部分专业化:我怎样才能专门化这个模板到这个模板?

如何将我的两个参数模板转换为一个参数模板?

上面的代码会在 'A a;' 上给出一个编译器错误 对于“错误数量的模板参数”。

0 投票
3 回答
727 浏览

c++ - 部分模板模板专业化

有这个代码:

但在某些情况下需要使用T*而不是std::list<T>as - 像这样:InnerCont

在这种情况下是否可以使用“模板模板”参数的部分专业化?
或者如何以最小的头痛存档它..

0 投票
2 回答
2771 浏览

c++ - C++ 枚举模板部分特化

我有一个非常适合我需要实现的算法的矩阵类。我知道 Eigen,但它不符合我的要求,所以我必须自己做。我一直在使用 Column Major 排序,现在我也有强大的用例来使用 Row Major,所以我想用一个定义排序的额外模板参数来专门化我的模板矩阵类,但我不想打破现有的代码。

这样做的具体效果是使用模板部分特化来生成不同的两个或三个关键类方法,例如operator(int i, int j)定义不同的排序,类似的概念可以使用预处理器完成#define,但这不是很优雅,只能编译所有在一种或另一种模式下。这是我要完成的工作的草图:

但编译器会抱怨部分专业化:

但是,如果我完全专门化这些功能,如下所示,它将起作用,但这非常不灵活:

这是语言部分模板专业化支持问题还是我使用了错误的语法?