问题标签 [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++ 专业化,type_of 或只是 typeid
我想知道在我的情况下使用什么更好以及为什么。首先我听说使用 RTTI (typeid) 很糟糕。任何人都可以解释为什么?如果我确切地知道类型在运行时比较它们有什么问题?此外,是否有任何示例如何使用 boost::type_of?我没有通过强大的谷歌搜索:) 对我来说其他解决方案是专业化,但我需要专门化至少 9 种新方法。这是我需要的一个例子:
我有这门课
所以我需要检查 typeid(我听到的是 BAD)并在示例中进行这 3 个实现,例如:
那么最好的解决方案是什么?我不想专门针对所有 A、B、C,因为每种类型都有 3 个专门化,所以我会得到 9 种方法或者只是这个 typeid 检查。
c++ - 没有默认函数的 C++ 模板特化
我有以下代码可以编译并且运行良好:
但是我想删除“默认”功能。也就是说,我想对 GetGlobal<t> 进行所有调用,其中 't' 不是 int 或 double 错误。
例如,GetGlobal<char>() 应该是编译时错误。
我试图只删除默认函数,但是,正如我想象的那样,我收到了很多错误。那么有没有办法“禁用”它并只允许调用该函数的专用版本?
谢谢!
c++ - C++ 模板特化没有拿起一个 int
我有以下代码:
进而:
我希望它像 cin >> 那样工作,即它需要将 lua 函数的返回值写入 abc。所以我需要它的地址..但它默认使用默认模板。我究竟做错了什么?肯定有办法做到这一点,因为 cin 正是这样做的。
谢谢!
请注意将 % 更改为 >> 的人:我将其更改回来,因为它是这样的:D 代码调用 Lua 函数 test("test", 5, nil, 2.333) 并将其返回值保存到 abc。% 用于函数的参数,>> 用于返回值。
c++ - 通过基类实现 C++ 模板特化
当我使用不是从 _base* 派生的类调用 foo 的构造函数时,我希望能够让编译器大喊大叫。当前代码仅允许 foo<_base*> 本身。任何简单的解决方案?
主代码:
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) 的错误,它试图安装未使用的成员函数?
编码:
c++ - 模板特化问题
我正在努力完成这项工作,但我没有运气。我确信有一个解决方法,但我还没有遇到它。好吧,让我们看看我是否可以简单地描述问题和需求:
我有一个 RGB 模板类,它可以将类型名作为其模板参数之一。它获取类型名并将其发送到另一个模板,该模板创建其基本类型的分类。例如:
然后有了这个,我有一个模板,可以根据每个 RGB 值的位数计算最大值:
然后在实际的 RGB 模板类中,我有:
这对我来说非常有效,直到我满足了固定点的需求。最大值有点不同,我不知道如何创建类型规范专业化来隔离它。我唯一的解决方法是消除和创建浮点和双精度的专门化过程,并假设一般情况是固定点。但必须有更好的方法来做到这一点。这是我想要对不正确的代码执行的操作:
然而,fixed-pt-t 是一个模板类,看起来像:
所以编译器不喜欢没有模板参数的特化。
有没有办法专门化我的类型规范类来使用fixed-pt-t?
它适用于一般情况,只是无法隔离它。
c++ - 需要一个从向量派生的向量
考虑这个简单的代码:
如果我有一个 V1 的实例,那么任何从 A 派生的对象都可以插入到向量中,在这里可以。
现在,假设我有两个名为 B 和 C 的简单类都派生自 A;
如果我有一个 V1 的实例,那么 B 和 C 的指针都可以插入到这个向量中,我想这是正确的吗?
如果是这样,我如何从 V1 派生一个向量以确保只插入 B 指针?
我正在考虑使用模板,但在这种情况下,我已经知道类的基础,并且在模板中你可以使用任何东西,对吧?
不知道我是否清楚,我的英语没有帮助......
我是否必须重写 push_back 和其他函数来检查模板参数是否来自 A?
拜托,不需要谈论我正在使用的提升或语法等......我真的只是想了解这个概念......我还不清楚。我对此有一些答案,但我想它们涉及太多演员来检查东西,我来这里是为了知道是否有更好的答案......
谢谢!
乔纳森
ps:你们能回答我的评论吗?有时我在这里问一些东西,然后最好的回答者来了,然后就不回来了:(。或者我应该问另一个问题而不是评论提问?
c++ - 模板类中单个方法的模板特化
始终考虑到包含我的模板类的以下标头至少包含在两个.CPP
文件中,因此此代码可以正确编译:
但请注意专业化方法中的内联。由于方法被定义不止一次,因此需要避免链接器错误(在 VS2008 中是 LNK2005)。我理解这一点,因为 AFAIK 完整的模板专业化与简单的方法定义相同。
那么,我该如何删除它inline
?代码不应在每次使用时重复。我搜索了谷歌,在这里阅读了一些问题,并尝试了许多建议的解决方案,但没有一个成功构建(至少在 VS 2008 中没有)。
谢谢!
c++ - 具有模板化类型的模板特化
我想专门化一个具有以下功能的类模板:
该函数没有参数,并应根据 Foo 的类型返回结果。(在这个玩具示例中,我们返回类型的字节数,但在实际应用程序中,我们希望返回一些元数据对象。)特化适用于完全指定的类型:
但是,我想将其推广到依赖(其他)模板参数本身的类型。添加以下特化会产生编译时错误(VS2005):
我假设这不是合法的 C++,但为什么呢?有没有办法优雅地实现这种模式?
c++ - 类模板特化的问题
我正在尝试将一些代码从 VC9 移植到 G++,但是我遇到了模板专业化显然不允许类成员使用的问题。
以下代码是类方法的 getValue 特化的这些错误的示例。在所有情况下,错误都是“错误:非命名空间范围内的显式特化class ...
”
是否只是不支持确切的语法,并且稍作更改就会使其工作,还是我需要更改代码以避免这样的专业化?如果是后者,一般来说最好的方法是什么?