问题标签 [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.
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
在构造函数中是不可见的,因为它是私有的。这就是为什么我需要一个部分专业化的朋友班。
c++ - 部分模板专业化有什么问题?
我正在编写一个带有一个类型参数和一个布尔值的模板类,这里是代码:
我收到了这些编译错误:
我究竟做错了什么?还是出于某种原因禁止部分专门化非类型参数?
同时,如果我在 if 语句中使用布尔参数,我会收到以下警告:
所以我应该为这种事情做专业化......
任何帮助将不胜感激!:)
提前致谢!!!!
c++ - 如何对嵌套类型进行部分模板特化?
我有一个模板类Converter
,我想做一个部分专业化。棘手的部分是我想将它专门化到MyFoo::Vec
可以MyFoo
再次专门化为模板参数的地方。如果这听起来令人困惑,也许代码本身使它更清晰:
这只是一个源自我的实际代码的迷你示例。这个问题不是关于这种转换器有多有用。鉴于我需要这样的转换器及其专业化,我只是对正确的语法感兴趣。
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 中的错误吗?
如果是,我们如何提交错误报告?
c++ - 带有 std::enable_if 的模棱两可的偏特化
我在以下情况下遇到问题:
然后
将报告 g++-4.5、g++-4.6、g++-4.7 和 clang++-3.1 中的模棱两可的类模板实例化(全部带有选项 -std=c++0x)
但是,如果我将第三种情况的支票替换为
然后 clang++-3.1 工作正常。
是编译器错误还是标准?
c++ - 模板部分特化防止从派生类初始化
我从具有部分专业化的模板继承,并且不能从派生的 ctor 调用模板 ctor。
当下面代码中的部分特化被注释掉时,它编译时不会出现任何错误或警告。
如果我取消注释专业化,我会收到以下错误:
$g++ trouble.cc
我需要做什么才能从supertypesIterator
ctor 中初始化基类?
我正在使用 g++ version 4.7.1
,尽管我还需要它才能跨平台工作。
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 ++抱怨的任何原因?有任何想法吗?
谢谢!
c++ - 如果指向成员函数的指针为 NULL,则方法的部分特化
我有一个带有 2 个参数的模板类和一个花哨的 push_back 方法:
它用
这段代码无法编译(错误 C2440: 'static_cast' : 无法从 'void (__thiscall pal::InterfaceFunction::* const )(void)' 转换为 'void *' 1> 没有进行此转换的上下文是可能的)。
在运行时执行 (!!doWhenPushingBack) 检查工作正常,但看起来有点傻 - 编译时输入的检查需要在编译时进行。
你能帮忙吗?谢谢。
c++ - 模板别名可以用于部分专业化吗?
给定模板别名
部分专业化
作为
生成与template parameter can not be deduced
clang 3.1 相同的警告,而 gcc 4.7 不生成警告
那么,它是格式错误的代码吗?
c++ - 模板类中的 C++ 非专业成员
我有一个关于模板类的问题。例如,上这堂课
现在,我希望能够使用 dllexport 在 CPP 文件中定义非专业化方法,并将专业化保留在标题中。通常,我想我可以将成员方法定义为模板,但由于我是从 TBase 继承的,所以这是不可能的。
那么我怎么能把它分开呢?我只覆盖了 TBase 中的 4 个方法,并且希望能够将其他 40 个左右的方法作为 DLLEXPORT 保留在 DLL 中,而专门化在头文件中。
提前感谢您的建议!