问题标签 [explicit-instantiation]
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++ - 模板模板函数实例化
如果编译器没有关于 CLASS_TEMPLATE 模板参数的任何提示,编译器如何实例化该函数?
我对模板模板的假设是错误的。
形式模板参数是带有一个模板参数的funcI
模板。
template void funcII < std::vector > () ;
将funcII
模板实例化为{ std::vector< int > container0 ; std::vector< float > container1 ; /* ... */ }
;
c++ - 我可以使用 decltype() 来避免显式模板实例化中的代码重复吗?
我有一个很长的模板函数声明:
没有过载。我想明确地实例化它。我可以写(比如T
= int
):
但我真的不想复制那个冗长的声明。我本来希望能够这样说:
接着:
现在,第一行编译(GCC 4.9.3),但第二行没有。我可以让它以某种方式工作吗?或者我可以使用decltype()
其他方式来避免复制实例化的声明吗?
注意:我特意使用了一个示例,在该示例中,您不能仅从参数中推断出类型,因为我也想要任何解决方案来支持这种情况。
c++ - G++ 中没有生成一些显式实例化
我正在构建一个库来处理几种不同类型的二进制“语言”,每种语言都有一个“处理器”类型。该库构建良好,到目前为止,我已将问题范围缩小到以下模板代码:
我有它支持的几十个不同的类,在我的库中,我有一长串显式实例化:
当我尝试构建一个链接到我的库的应用程序时,在通过 编译时遇到以下错误g++ -Wall -std=c++11
,但在 Visual Studio 2015 中构建时没有任何问题:
就好像在 Linux 中构建时没有完全生成显式实例化一样。我尝试通过以下方式在库中显式实例化:
由于重复的显式实例化,这只会导致库无法构建。
什么会导致此问题仅在 Linux 版本中出现?
谢谢你。
c++ - 显式模板实例化语法
显式实例化声明是否需要“class”关键字?
c++ - c++:什么是显式实例化
我正在阅读 C++ Primer 5th edition 这本书,我得到了这个:
使用模板时会生成实例化这一事实(第 16.1.1 节,第 656 页)意味着相同的实例化可能出现在多个目标文件中。当两个或多个单独编译的源文件使用具有相同模板参数的相同模板时,每个文件中都有该模板的实例化。
我不确定我是否正确,所以我在这里做了一个例子:
根据上面的段落,在这个例子中,Test_tpl 被实例化(Test_tpl<int>
)两次。现在如果我们使用显式实例化,Test_tpl<int>
应该只实例化一次,但我不知道如何在这个例子中使用这种技术。
c++ - 通过转换运算符调用显式实例化的模板函数
让我们假设我们有一个函数模板,它在 cpp 文件中借助显式实例化实现,如下所示:
函数.h
函数.cpp
我们现在可以在包含function.h的主文件中调用该函数,如下所示:
让我们进一步假设我们有一个这样实现的类:
数据.h
以下代码导致链接器错误 LNK2019: unresolved external (Visual Studio 2010):
我们可以使用以下表达式之一来为function ()
但是为什么不能只调用function(a)?是否存在任何其他解决方案来实现这一点,而无需显式实例化具有数据类型的function()?
c++ - 未在显式实例化中生成的默认构造函数
我不明白为什么 C++ 似乎会在显式模板实例中抑制默认 ctors 的生成。对于这个源文件,
目标文件包括显式 ctor,但不包括默认的默认和复制 ctor。
但是,如果我自己写出这两个演员,
它们出现在目标文件中。
在 gcc 5.3.1 (Linux) 和 clang-700.1.81 (OS/X) 上测试。为什么是这样?
c++ - 如何在 C++ 中使用默认模板参数显式实例化类?
我有一个带有类型和非类型(默认)模板参数的类。非类型参数可以组合,可以通过以下方式实例化:
该类TNT
有一个类型参数,其余为默认值。在 cpp 文件中显式实例化此类的正确方法是什么?由于可以组合非类型参数,因此可以进行多种组合。
c++ - 虚拟继承,显式实例化——返回派生类引用/指针(协变类型)
.hpp
.cpp
我需要一些方法来返回引用以制作“链”/定义赋值运算符/等:
我还必须处理虚拟继承以避免“钻石问题”(为简单起见,此处省略)。
但是,这不起作用:
MSVC:
显式实例化在没有虚拟继承的情况下工作得很好。所以我想知道这里有什么问题。(如果没有返回对象引用/指针的成员函数,一切正常。)
c++ - 显式模板实例化和 SFINAE
我收到一个编译错误,很明显我做错了什么,但我不确定如何修复它,也不知道是否可以进行显式实例化和 SFINAE。可重现的示例是最小的,因此它可能不完全有意义,但本质上存在一个可以为 unique_ptr 或observer_ptr 实例化的向量类。SFINAE 部分仅允许 add 函数仅对 unique_ptr 可用。
我在那里定义了CompilationFail。似乎如果 Bar 有一个 FooPtrVectorView 那么我得到一个编译错误。如果我不定义它,那么一切都很好。如果我只是在一个函数(而不是 Bar 的一部分)中使用 FooPtrVectorView 就没有问题。
msvc 的编译器错误是错误 C3190: 'Foo *FooSmartPtrVector::add(void)' with the provided template arguments is not the explicit instantiation of any member function of 'FooSmartPtrVector'
对于 msvc 用户,我有一个包含整个解决方案的 zip 文件,这可能会使它更容易https://app.box.com/s/nzbgvxo58u4jmiw50o1hlh28yfyxo1d1
观察者ptr.h
Foo.h 和 .cpp 中的其余实现
FooSmartPtrVector.h
FooSmartPtrVector.cpp
酒吧.h
任何帮助表示赞赏。