问题标签 [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 投票
2 回答
477 浏览

c++ - 如何在两个 mixin 模板之间实现多态行为?

我正在使用 C++ 模板实现 mixins,以支持基(模板化)类的一些“扩展”行为。

如果继承图中存在另一个 mixin,我需要修改一个 mixin 中的行为。(理想情况下,这将不考虑首先混合的是哪个,但我愿意接受它们必须以特定顺序派生的限制。)

换句话说,如果我有:

当 M1 混入时,M2 方法的行为需要改变 - M1 提供了需要用于计算 M2 结果的数据成员。另一方面,如果不混入M2,则M2对那些完全无效的数据成员做出一定的保证。

那么,我的问题是如何实现这个 C++ '03?

我怀疑有一种使用模板方法和专业化的方法,但是我的模板fu 还不够强大(还)。


根据 dauphic 的回应,我试过这个,它确实有效。完全复制 M2 模板的需要太可怕了,我接下来要尝试 SFINAE 方法。


经过一番努力,我设法让 SFINAE 变体也能正常工作。除了这部分之外,代码基本相同:

正如我在下面提到的,enable_if<> 模板不处理布尔表达式(对我来说),所以我选择了 disable_if<>,这似乎可以解决问题。

这些都不是特别令人愉快的,因为这段代码将被贡献给一个当前不使用 boost 的项目,并且因为复制整个模板的选项是维护的噩梦。但他们都完成了工作。我将考虑将 boost 解决方案作为答案,仅仅是因为希望 boost 代码将成为标准,因此不那么令人头疼。

谢谢你们。

0 投票
3 回答
1426 浏览

c++ - c++模板特化方法定义

下面的代码工作正常,一个简单的模板类,有一个定义和一个使用

如果我然后添加以下内容(在 main 之上,但在模板类 foo 的声明之后;)

我从 g++ 得到一个错误

第 19 行:错误:'std::string foo::what()' 的模板 ID 'what<>' 与任何模板声明都不匹配

这是一个显示错误的键盘: http: //codepad.org/4HVBn9oJ

我犯了什么明显的错误?或者这对于 c++ 模板是不可能的?定义所有内联方法(使用 template<> foo 的定义)有效吗?

再次感谢大家。

0 投票
1 回答
2767 浏览

c++ - C++ 函数模板,Int 参数问题

我很好奇为什么这不起作用:

当我尝试使用这个函数时,它会调用我首先定义的模板特化。因此,map<ASSIGN_RIGHT>map<ASSIGN_LEFT>在上面的代码中调用,除非我翻转专业化的顺序,否则它将始终调用map<ASSIGN_RIGHT>.

输出是

这样做的想法是,我不必编写两个例程来从结构中输入/输出数据。

辅助问题——我想在模板参数上方加上“int”,但显然你不能做部分专业化。很想找到解决方法。

提前致谢。

0 投票
2 回答
933 浏览

c++ - 当模板类未专用时,成员函数的专用模板的解决方法

我正在构建一个具有类标准接口的数据结构类,并为数据结构实现不同的迭代器。

从概念上讲,我想做的是这样的:

但这当然不能编译,因为 C++ 不允许在非专用模板容器中专门化模板成员函数。

显而易见的解决方法当然是声明 2 个不同的函数:Begin_Iterator1 和 Begin_Iterator2 并完成它。但我正在寻找一种不会改变界面的解决方法。

有任何想法吗?

编辑:我忘了提到这是针对硬件分配的,因此 boost 甚至 std 都不是一个选项。

0 投票
1 回答
871 浏览

c++ - 使用点后模板函数的特化会破坏编译

考虑下一个例子:

编译失败并出现以下错误消息:

标准中的哪一段解释了这个错误?

PS:我知道如果我将函数定义移到 main 前面会使错误消失。

0 投票
2 回答
208 浏览

c++ - C++,模板特化问题

我在模板类专业化方面遇到问题,请参阅下面的代码。

是否可以为 Point 专门化 Container 类?

更新的问题:

我尝试了以下代码,它有效吗?

0 投票
2 回答
10424 浏览

c++ - 模板类成员函数只特化

我正在阅读模板的完整指南,它说以下内容:

它在哪里谈论类模板专业化。

尽管可以特化类模板的单个成员函数,但一旦这样做,就不能再特化该特化成员所属的整个类模板实例。

我实际上想知道这是怎么回事,因为您可以在没有任何成员函数的情况下进行专业化。是不是说你不能有一个只有一个成员函数的特化,然后另一个有所有成员函数的特化?

有人可以澄清一下吗?

0 投票
2 回答
1335 浏览

c++ - 嵌套在模板类中的类型的部分特化

我正在使用模板和部分专业化,但有一种专业化我不知道如何编写......我将简化代码以使其更易于阅读。

让我们考虑一下

通常,我可以这样专攻:

也适用于模板类型:

现在我想对嵌套在模板类中的类型进行专门化:

这失败了。我还尝试将 'typename' 放在 y::nested_type 之前,但它并没有解决问题。编译器错误是:

我想做的似乎合乎逻辑,但我不确定是否可能。我将 C++0x 与 g++-4.5 一起使用。有人知道编写这种专业化的正确语法吗?

0 投票
2 回答
915 浏览

c++ - 专注于 C++ 模板中的类型子集

我有一个关于 C++ 模板专业化的问题,我希望这里有人可以提供帮助。我有一个有 3 个模板参数的类:

我想要做的是编写 myFunc 的几个版本,专门用于类型 C,但对类型 A 和 B 是通用的。所以我不想要这样的完全模板化的函数:

而且我不想要像这样的完全专业化的功能

相反,我想做一些类似于

这个想法是,如果类类型 C 是 int,我会调用一个版本的 myFunc(),如果类类型 C 是 double,我会调用不同版本的 myFunc。我已经尝试了很多不同的模板专业化语法组合(这里列出的太多了),但似乎没有一个可以编译。

有人可以在这里指出我正确的方向吗?在此先感谢您的帮助。

迈克尔

0 投票
4 回答
1417 浏览

c++ - 以模板类为参数特化模板结构

我试图通过创建一个包含矩阵和对这些矩阵的操作的库来塑造我的模板技能(我知道的很少)。基本上,我希望我的矩阵是非常强类型的(数据类型和大小在编译时已知),并且我还希望能够自动扣除转置矩阵的类型。

template< typename TDataType, size_t rows, size_t cols > class MyMatrix

矩阵可以嵌套,因此TDataType可以是整数类型,也可以是单独的MyMatrix<...>,导致转置矩阵的数据类型不一定与原始矩阵的数据类型相同,例如:( Transpose( MyMatrix< MyMatrix< char, 2, 3 >, 4, 6 > ) ==> MyMatrix< MyMatrix< char, 3, 2 >, 6, 4 >外层矩阵的数据类型已更改)

我第一次尝试转置类型演绎是:

我没有找到这样做的方法,因为我似乎无法使用 MyMatrix 专门化 Transpose 模板(TDataType 未知和类似错误)。

我想出的唯一可编译的解决方案(我什至不知道它是否有效)是这样的:

我相信我把事情弄得太复杂了;有没有更简单的解决方案来实现我想要的?


我的问题的答案的答案(我发布了没有帐户的问题,所以我没有足够的代表以正常方式做事)。已经非常感谢了!

@Bo Persson @Will A:我不打算将其用作通用矩阵库,我想对特定(事先已知)大小的矩阵执行操作,并想看看我可以通过使用这种方法获得什么。它可能允许我优化矩阵的内存布局(例如在 32 字节边界上对齐行向量)并做其他类型的时髦的东西。我希望通过这样做很多次,但我想要达到的主要目的是体验并找出哪些有效,哪些无效(以及什么是难做的,什么是难做的) 't)。

@Bo Perrson:我知道为什么第一个版本无法编译,但我想知道我的第二次尝试是否有一个更简单的版本可以工作。主要问题是 MyMatrix 本身就是一个类模板,我需要以某种方式将它的模板参数获取到转置结构。

@VJo:我认为这行不通。如果 T 是 MyMatrix<..> 本身,则转置矩阵应该具有Transpose<T> 数据类型,而不是 T 本身。对于所有基本类型(char、int、double ...),这当然是正确的并且更简单。