草庐IT

Instantiation

全部标签

c++ - 通过类名实例化类

我有多个类共享一个公共(public)基类,如下所示:classBase{};classDerivedA:publicBase{};classDerivedB:publicBase{};classDerivedC:publicBase{};现在,我需要知道在运行时(基于输入)要实例化这些派生类中的哪些。例如,如果输入是"DerivedA",我需要创建一个DerivedA目的。输入不一定是字符串,也可以是整数-重点是存在某种键,我需要一个值来匹配该键。但问题是,如何实例化该类?C++没有像C#或Java那样的内置反射。我发现一个通常建议的解决方案是使用这样的工厂方法:Base*creat

c++ - 我可以在不重复签名的情况下实例化模板吗?

我想实例化一些带有长签名的函数:templatevoidfoo(T&t,SomeTypesome_parameter,AnotherTypeanother_parameter,EtcTypeyet_another_parameter,AsYouCanTellthis_is_a_very_long_signature);实例化foo的直接方法是:templatevoidfoo(int&t,SomeTypesome_parameter,AnotherTypeanother_parameter,EtcTypeyet_another_parameter,AsYouCanTellthis_is_

c++ - g++ 错误 : specialization after instantiation (template class as friend)

考虑以下C++代码:templateclassSingleton{};classConcreteSingleton:publicSingleton{templatefriendclassSingleton;};intmain(){}Singleton应该是ConcreteSingleton的friend:它适用于Microsoft的可视化C++编译器。但是,我不能用g++4.8.4编译它。错误是:error:specializationof‘Singleton’afterinstantiationtemplatefriendclassSingleton;有什么办法可以解决吗?

c++ - 成员函数中的类实例化

在该类的成员函数中实例化一个类是否安全?例如,假设我有一个带有成员函数CMyClass::MemberFunc的类CMyClass,我想在CMyClass中创建另一个实例CMyClass::MemberFunc。voidCMyClass::MemberFunc(void){CMyClass*pMyClass=newCMyClass();}这合法/安全吗?我知道它编译。我关心的是递归。当我第一次从主应用程序实例化CMyClass时会遇到递归错误吗?voidmain(void){staticCMyClass*s_pMyClass=newCMyClass();//Willthiscauser

c++ - 即使有显式实例化,也没有为显式专用模板生成代码

我从gcc4.8.3和clang3.2得到了一致的行为,但不明白为什么会这样。尽管我有一个类模板的显式实例化,但当我使用模板的完全专用实例时,代码没有生成并且我得到一个undefinedsymbol。我在文件“temp.hpp”中有一个简单的类模板定义#pragmaoncetemplateclassC{public:C(T1c):d_c(c){};~C()=default;voidprint();private:T1d_c;};请注意,方法“print()”已声明,但未在此处定义。我想要.cpp文件中的定义,它将专门用于不同的类型。所以在temp.cpp文件中我有print()方法的默

c++ - std::map 和 -fno-implicit-templates

我正在尝试使用g++4.4进行编译并链接一个使用STL的简单程序。我正在尝试使用-fno-implicit-templates来做到这一点,因此必须显式实例化所有模板。我不明白为什么此代码有效:#include//templateclassstd::map;templateclassstd::_Rb_tree,std::_Select1st>,std::less,std::allocator>>;intmain(){std::maptable;return0;}我希望这个程序需要这一行:templateclassstd::map;,但是该行不会使程序链接。std::_Rb_treeli

c++ - 非模板类中模板函数的内存模型?

假设我有:templateclassA{//DosomethingwithT};我知道编译器会生成一个classA对于每个不同的T在代码中定义。如果我有:classB{templatevoidf(){/*DosomethingwithT*/}};classB是否只有一个定义?但是f()的多个重载对于每个不同的T它叫什么? 最佳答案 是的,每次实例化f会有f()的定义由编译器生成。根据编译器的不同,f()可以通过内联进行优化,或者它可以在代码段中获取那么多空间。但是,我很少遇到这种在非模板类中有一个非静态模板成员函数(没有任何参数!)

c++ - 需要帮助清理模板实例化框架

我一直在研究一个框架来帮助函数模板实例化。我有一堆函数,出于优化目的由整数值模板化,需要在运行时实例化和选择。用法示例如下://Functiontoinstantiatetemplatesof.templatevoidMyFunction(float,double){};//Listofvaluestosubstituteintoeachtemplateparameter.typedefmpl::vector_cvaluesToInstantiate;intnumberOfValuesPerParameter=size::type::value;//Functionpointertyp

c++ - 什么是 C++ 中用于分离 header /源的模板特化的可靠方法

在中等规模甚至大型复杂项目中,分离模板声明和定义很有用以减少编译时间。然而,在复杂的代码中,小的程序员错误可能会导致不被注意的行为改变,例如调用通用版本而不是专用版本。例子:由于错过声明,模板特化变得不可见。/////////////////////fileA.hpp/////////////////////#includetemplateclassA{public:voidfoo(){std::cerrvoidA::foo();/////////////////////fileA-foo-int.cpp/////////////////////#include"A.hpp"templ

c++ - 在使用 Clang 编译 CRTP Singleton 时,如何解决声称缺少 "explicit instantiation declaration"的问题?

我们正在使用curiouslyrecurringtemplatepattern实现单例。但是,在最近的Clang版本中,我们收到了-Wundefined-var-template警告。建议的修复方法是添加“显式实例化声明”。我试图这样做,但后来在定义单例模板类成员变量的编译单元中出现有关“实例化后的显式特化”的错误。解决此警告突出显示的问题的适当构造是什么?简化详细信息(已删除大部分逻辑,以制作MCVE):单例基础.hh:templateclassSingletonBase{public:staticT*get_instance(){if(!instance_){instance_=T