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

c++ - C++ 专业化,type_of 或只是 typeid

我想知道在我的情况下使用什么更好以及为什么。首先我听说使用 RTTI (typeid) 很糟糕。任何人都可以解释为什么?如果我确切地知道类型在运行时比较它们有什么问题?此外,是否有任何示例如何使用 boost::type_of?我没有通过强大的谷歌搜索:) 对我来说其他解决方案是专业化,但我需要专门化至少 9 种新方法。这是我需要的一个例子:

我有这门课

所以我需要检查 typeid(我听到的是 BAD)并在示例中进行这 3 个实现,例如:

那么最好的解决方案是什么?我不想专门针对所有 A、B、C,因为每种类型都有 3 个专门化,所以我会得到 9 种方法或者只是这个 typeid 检查。

0 投票
5 回答
9315 浏览

c++ - 没有默认函数的 C++ 模板特化

我有以下代码可以编译并且运行良好:

但是我想删除“默认”功能。也就是说,我想对 GetGlobal<t> 进行所有调用,其中 't' 不是 int 或 double 错误。

例如,GetGlobal<char>() 应该是编译时错误。

我试图只删除默认函数,但是,正如我想象的那样,我收到了很多错误。那么有没有办法“禁用”它并只允许调用该函数的专用版本?

谢谢!

0 投票
3 回答
378 浏览

c++ - C++ 模板特化没有拿起一个 int

我有以下代码:

进而:

我希望它像 cin >> 那样工作,即它需要将 lua 函数的返回值写入 abc。所以我需要它的地址..但它默认使用默认模板。我究竟做错了什么?肯定有办法做到这一点,因为 cin 正是这样做的。

谢谢!


请注意将 % 更改为 >> 的人:我将其更改回来,因为它是这样的:D 代码调用 Lua 函数 test("test", 5, nil, 2.333) 并将其返回值保存到 abc。% 用于函数的参数,>> 用于返回值。

0 投票
3 回答
4790 浏览

c++ - 通过基类实现 C++ 模板特化

当我使用不是从 _base* 派生的类调用 foo 的构造函数时,我希望能够让编译器大喊大叫。当前代码仅允许 foo<_base*> 本身。任何简单的解决方案?

主代码:

0 投票
2 回答
218 浏览

c++ - 使用无法安装的类的有效 STATIC 成员函数

我有以下代码:

它在 gcc-3.4、gcc-4.3、intel 编译器下编译没有问题,但在 MSVC9 下编译失败。

MSVC 告诉“使用未定义类型,同时使用 C=shortc_traits<C>编译类模板成员函数。void foo<C>::go(void)

编译器试图安装未使用类的未使用成员函数,因为这个类根本没有使用。

我可以通过专门化整个类 foo 而不是专门化其成员函数来解决这个问题。但是,由于不同的原因,专业化整个班级对我来说有点问题。

最大的问题:什么是对的?

  • 我的代码是否错误并且 gcc 和 intel 编译器只是忽略了这个问题,因为它们没有完全安装 foo,或者
  • 代码是正确的,这是 MSVC9 (VC 2008) 的错误,它试图安装未使用的成员函数?

编码:

0 投票
1 回答
273 浏览

c++ - 模板特化问题

我正在努力完成这项工作,但我没有运气。我确信有一个解决方法,但我还没有遇到它。好吧,让我们看看我是否可以简单地描述问题和需求:

我有一个 RGB 模板类,它可以将类型名作为其模板参数之一。它获取类型名并将其发送到另一个模板,该模板创建其基本类型的分类。例如:

然后有了这个,我有一个模板,可以根据每个 RGB 值的位数计算最大值:

然后在实际的 RGB 模板类中,我有:

这对我来说非常有效,直到我满足了固定点的需求。最大值有点不同,我不知道如何创建类型规范专业化来隔离它。我唯一的解决方法是消除和创建浮点和双精度的专门化过程,并假设一般情况是固定点。但必须有更好的方法来做到这一点。这是我想要对不正确的代码执行的操作:

然而,fixed-pt-t 是一个模板类,看起来像:

所以编译器不喜欢没有模板参数的特化。
有没有办法专门化我的类型规范类来使用fixed-pt-t?
它适用于一般情况,只是无法隔离它。

0 投票
4 回答
486 浏览

c++ - 需要一个从向量派生的向量

考虑这个简单的代码:

如果我有一个 V1 的实例,那么任何从 A 派生的对象都可以插入到向量中,在这里可以。

现在,假设我有两个名为 B 和 C 的简单类都派生自 A;
如果我有一个 V1 的实例,那么 B 和 C 的指针都可以插入到这个向量中,我想这是正确的吗?

如果是这样,我如何从 V1 派生一个向量以确保只插入 B 指针?
我正在考虑使用模板,但在这种情况下,我已经知道类的基础,并且在模板中你可以使用任何东西,对吧?

不知道我是否清楚,我的英语没有帮助......
我是否必须重写 push_back 和其他函数来检查模板参数是否来自 A?

拜托,不需要谈论我正在使用的提升或语法等......我真的只是想了解这个概念......我还不清楚。我对此有一些答案,但我想它们涉及太多演员来检查东西,我来这里是为了知道是否有更好的答案......

谢谢!
乔纳森

ps:你们能回答我的评论吗?有时我在这里问一些东西,然后最好的回答者来了,然后就不回来了:(。或者我应该问另一个问题而不是评论提问?

0 投票
6 回答
65076 浏览

c++ - 模板类中单个方法的模板特化

始终考虑到包含我的模板类的以下标头至少包含在两个.CPP文件中,因此此代码可以正确编译:

但请注意专业化方法中的内联。由于方法被定义不止一次,因此需要避免链接器错误(在 VS2008 中是 LNK2005)。我理解这一点,因为 AFAIK 完整的模板专业化与简单的方法定义相同。

那么,我该如何删除它inline?代码不应在每次使用时重复。我搜索了谷歌,在这里阅读了一些问题,并尝试了许多建议的解决方案,但没有一个成功构建(至少在 VS 2008 中没有)。

谢谢!

0 投票
2 回答
3624 浏览

c++ - 具有模板化类型的模板特化

我想专门化一个具有以下功能的类模板:

该函数没有参数,并应根据 Foo 的类型返回结果。(在这个玩具示例中,我们返回类型的字节数,但在实际应用程序中,我们希望返回一些元数据对象。)特化适用于完全指定的类型:

但是,我想将其推广到依赖(其他)模板参数本身的类型。添加以下特化会产生编译时错误(VS2005):

我假设这不是合法的 C++,但为什么呢?有没有办法优雅地实现这种模式?

0 投票
2 回答
273 浏览

c++ - 类模板特化的问题

我正在尝试将一些代码从 VC9 移植到 G++,但是我遇到了模板专业化显然不允许类成员使用的问题。

以下代码是类方法的 getValue 特化的这些错误的示例。在所有情况下,错误都是“错误:非命名空间范围内的显式特化class ...

是否只是不支持确切的语法,并且稍作更改就会使其工作,还是我需要更改代码以避免这样的专业化?如果是后者,一般来说最好的方法是什么?