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

0 投票
3 回答
10201 浏览

c++ - 为什么不允许模板特化在不同的命名空间中?

请看看我想要做什么:

这是不允许的。您能否澄清一下为什么专业化不能位于不同的命名空间中,以及可用的解决方案是什么?另外,它在 C++0x 中是固定的吗?

例如,这将允许我专门化std::maxstd::swap、等。而无需通过向?std::numeric_limits中添加一些东西来诉诸未定义的行为。::std::


@AndreyT 以下是我使用它的方式:

这可以做到吗?

0 投票
4 回答
3006 浏览

c++ - 如何专门化非模板类的模板成员函数?

假设我有一个文件 alpha.h:

如果我在多个 cpp 文件中包含 alpha.h 并使用 GCC 4.4 进行编译,它会抱怨存在多个对象文件的多个定义foo<int>foo<float>跨多个对象文件。对我来说很有意义,所以我将最后两行更改为:

但随后 GCC 说:

显式模板特化不能有存储类

好的......那么我应该如何正确地做到这一点?我担心 C++ 不允许我首先尝试做的事情,在这种情况下,是否有一个好的习语可以完成同样的事情?

0 投票
7 回答
4811 浏览

c++ - Typedef 和模板特化

考虑这段代码:

它失败了,因为编译器看到的是some_trait<int>.

解决这个问题的最佳方法是什么?

0 投票
4 回答
1590 浏览

c++ - char数组的模板特化上的“未解析的外部符号”

我的代码中有这样的东西:

这会产生以下链接器错误:

我应该将 A 模板专门用于什么类型,以便可以将它与字符数组一起使用?我尝试const char*了 const、char、* 和 & 的其他组合,但没有任何效果。

请注意,我无法更改DoSomething功能。

另外,如果可能的话,我希望编译器自动推断(或转换)模板类型,而不在DoSomething<smth>()调用中指定它main()

0 投票
2 回答
259 浏览

c++ - SFINAE:有些失败比其他失败更平等?

我正在尝试使用SFINAE来区分具有名为“名称”的成员的类。我以似乎是标准模式的方式进行了设置,但它不起作用——编译器没有默默地忽略“失败”的替换,而是产生了一个错误。

我确定我遇到了一些模板替换规则,如果有人能解释哪一个,我将不胜感激。

这是一个精简的例子。我正在使用 gcc:

0 投票
1 回答
609 浏览

c++ - 类命名空间内的模板特化

如何专门化在我的类主体中的某个外部命名空间中定义的模板?

使用不编译的 BGL 的具体示例:

如果将 container_gen 的专业化移出 A 类,一切都会很好。具体问题是我不知道如何从 A 类引用“boost”命名空间。

0 投票
2 回答
1453 浏览

c++ - 类模板中函数的专业化顺序是否重要

考虑类似...

请注意专业化如何高于非专业化版本。如果我将专业版本放在非专业版本之下Vector<float>, == 比较是否仍能按预期工作?出于某种原因,我想我记得读过,如果您在这种情况下将专业化放在下面,那么当编译器查看标头时,它将首先看到默认值,看看它是否有效,然后使用它。

0 投票
3 回答
1347 浏览

c++ - 如何为模板专业化创建类型标签

iostream我有一个通过模板支持 -syntax的自定义日志记录类operator <<

我也有这个操作符的专门版本,应该在日志消息完成时调用:

EndOfMessageType定义如下:

定义了全局常量eom,以便用户可以像std::endl在日志消息末尾一样使用它。我的问题是,这个解决方案是否有任何陷阱,或者是否有一些既定的模式可以做到这一点?

提前致谢!

0 投票
1 回答
2111 浏览

c++ - 模板专业化:非内联函数定义问题

以下代码可以正确编译。

但是,如果我尝试在void doSomething(char val1, std::string val2)外部定义,则会收到以下错误。

错误:

错误 1 ​​错误 C2910: 'Container::doSomething' : 不能明确专门化 c:\users\bharani\documents\visual studio 2005\projects\templates\template specialization\templatespecializationtest.cpp 35

我犯了什么错误?

谢谢。

0 投票
1 回答
265 浏览

c++ - 为什么在显式实例化类模板之前需要显式实例化外部类模板

我的问题是以下线程:专门化成员模板而不专门化其父模板

我完全同意标准说这样做是非法的。但我想了解为什么这样做是非法的?如果允许,会有什么影响?