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

c++ - C++ 模板:部分模板规范和友元类

是否有可能以某种方式使部分模板规范成为朋友类?即考虑你有以下模板类

现在你有了部分特化,例如指针

我想要完成的是,每一个可能X<T*>都是X<S>for ANY的朋友类S。即X<A*>应该是的朋友X<B>

当然,我想到了 X 中常用的模板友元声明:

但是,这不会编译,g++ 告诉我:

test4.cpp:34:15:错误:“ template<class T> class X”的特化必须出现在命名空间范围内

test4.cpp:34:21:错误:部分特化“ X<S*>”声明为“朋友”

这根本不可能,还是有一些解决方法?

我问的原因是我需要一个构造函数来X<T*>从任意创建此类X<S>S必须是 的子类型T)。

代码如下所示:

现在,编译器当然会抱怨,这x.t在构造函数中是不可见的,因为它是私有的。这就是为什么我需要一个部分专业化的朋友班。

0 投票
2 回答
3188 浏览

c++ - 部分模板专业化有什么问题?

我正在编写一个带有一个类型参数和一个布尔值的模板类,这里是代码:

我收到了这些编译错误:

我究竟做错了什么?还是出于某种原因禁止部分专门化非类型参数?

同时,如果我在 if 语句中使用布尔参数,我会收到以下警告:

所以我应该为这种事情做专业化......

任何帮助将不胜感激!:)

提前致谢!!!!

0 投票
1 回答
783 浏览

c++ - 如何对嵌套类型进行部分模板特化?

我有一个模板类Converter,我想做一个部分专业化。棘手的部分是我想将它专门化到MyFoo::Vec可以MyFoo再次专门化为模板参数的地方。如果这听起来令人困惑,也许代码本身使它更清晰:

这只是一个源自我的实际代码的迷你示例。这个问题不是关于这种转换器有多有用。鉴于我需要这样的转换器及其专业化,我只是对正确的语法感兴趣。

0 投票
2 回答
943 浏览

c++ - Sun Studio 12 中的模板编译错误

我们正在迁移到 Sun Studio 12.1 和新的编译器 [CC: Sun C++ 5.10 SunOS_sparc 2009/06/03]。我在编译使用早期版本的 Sun 编译器 [CC: Sun WorkShop 6 update 2 C++ 5.3 2001/05/15] 编译良好的代码时遇到编译错误。

这是我得到的编译错误。

“Sample.cc”:错误:找不到 main() 中所需的 LoopThrough(int[2]) 的匹配项。1 检测到错误。*** 错误代码 1。

代码:

如果我用通用版本取消注释代码,代码编译得很好并且通用版本被调用。在禁用扩展的 MSVC 2010 和这里的 ideone 情况下,我没有看到这个问题。调用该函数的专用版本。现在的问题是,这是 Sun Compiler 中的错误吗?

如果是,我们如何提交错误报告?

0 投票
2 回答
2796 浏览

c++ - 带有 std::enable_if 的模棱两可的偏特化

我在以下情况下遇到问题:

然后

将报告 g++-4.5、g++-4.6、g++-4.7 和 clang++-3.1 中的模棱两可的类模板实例化(全部带有选项 -std=c++0x)

但是,如果我将第三种情况的支票替换为

然后 clang++-3.1 工作正常。

是编译器错误还是标准?

0 投票
1 回答
421 浏览

c++ - 模板部分特化防止从派生类初始化

我从具有部分专业化的模板继承,并且不能从派生的 ctor 调用模板 ctor。

当下面代码中的部分特化被注释掉时,它编译时不会出现任何错误或警告。

如果我取消注释专业化,我会收到以下错误:

$g++ trouble.cc

我需要做什么才能从supertypesIteratorctor 中初始化基类?

我正在使用 g++ version 4.7.1,尽管我还需要它才能跨平台工作。

0 投票
1 回答
762 浏览

c++ - 模板类成员函数的特化 - 在 Linux 上使用 g++-4.7

我从这个线程中知道 -模板类成员函数只专门化 ,如果我专门化一个类模板,我需要专门化所有成员函数。

所以,我的理由是我会“实例化”一个模板类。(不确定它是否正确的说法)

然后,由于这个实例化的类是一个成熟的类,我可以专门化一个特定的方法。

上面的代码在 Windows 环境下工作。(视觉工作室 2008)

但是这种专业化在 Linux 上不起作用 - 使用 g++-4.7。通过阅读其他一些线程,我还将 -std=c++11 传递给我的 g++ 编译命令。

我收到以下 2 个错误 -

现在,错误号。template<>如果我在前面添加一个让我更担心的 1 消失inline bool A_0::dummy(void *value),因为我知道专业化并没有如我所愿地发生。

错误编号 2不会消失。

我对模板类成员函数专业化越来越感到困惑。我在这里错过了什么?g ++抱怨的任何原因?有任何想法吗?

谢谢!

0 投票
2 回答
142 浏览

c++ - 如果指向成员函数的指针为 NULL,则方法的部分特化

我有一个带有 2 个参数的模板类和一个花哨的 push_back 方法:

它用

这段代码无法编译(错误 C2440: 'static_cast' : 无法从 'void (__thiscall pal::InterfaceFunction::* const )(void)' 转换为 'void *' 1> 没有进行此转换的上下文是可能的)。

在运行时执行 (!!doWhenPushingBack) 检查工作正常,但看起来有点傻 - 编译时输入的检查需要在编译时进行。

你能帮忙吗?谢谢。

0 投票
2 回答
704 浏览

c++ - 模板别名可以用于部分专业化吗?

给定模板别名

部分专业化

作为

生成与template parameter can not be deducedclang 3.1 相同的警告,而 gcc 4.7 不生成警告

那么,它是格式错误的代码吗?

0 投票
3 回答
648 浏览

c++ - 模板类中的 C++ 非专业成员

我有一个关于模板类的问题。例如,上这堂课

现在,我希望能够使用 dllexport 在 CPP 文件中定义非专业化方法,并将专业化保留在标题中。通常,我想我可以将成员方法定义为模板,但由于我是从 TBase 继承的,所以这是不可能的。

那么我怎么能把它分开呢?我只覆盖了 TBase 中的 4 个方法,并且希望能够将其他 40 个左右的方法作为 DLLEXPORT 保留在 DLL 中,而专门化在头文件中。

提前感谢您的建议!