草庐IT

TEMPLATE

全部标签

c++ - `template` 关键字限定符能否使代码编译成功,但有所不同?

我正在阅读有关模板关键字限定符(https://www.ibm.com/support/knowledgecenter/SSPSQF_9.0.0/com.ibm.xlcpp111.aix.doc/language_ref/keyword_template_qualifier.html和WhereandwhydoIhavetoputthe"template"and"typename"keywords?)的信息,但仍有一些内容让我感到困惑。是否可能有这样的代码,它编译成功,但会导致两种不同的操作?SomeObjectInstance.templatesome_function();Some

c++ - 使用无法安装的类的有效 STATIC 成员函数

我有以下代码:在gcc-3.4、gcc-4.3、intel编译器下编译没有问题,在MSVC9下编译失败。MSVC告诉“使用未定义类型c_traits,同时编译类模板成员函数voidfoo::go(void)与C=short。编译器试图安装未使用类的未使用成员函数,因为根本没有使用这个类。我可以通过专门化整个类foo而不是专门化来解决这个问题它的成员函数。但重点是,由于不同的原因,对整个类(class)进行特化对我来说有点问题。大问题:什么是正确的?我的代码是否错误,gcc和intel编译器只是忽略了这个问题,因为它们没有完全安装foo,或者代码正确,这是MSVC9(VC2008)的错误

c++ - 如何在编译时保存指向成员的指针?

考虑以下代码templatestructA{typedefTvalue_type;//OK.saveTtovalue_typestaticconstintsize=N;//OK.saveNtosize};看,如果此参数是类型名称或整数值,则可以保存任何模板参数。问题是指向成员的指针是一个偏移量,即整数。现在我想在编译时保存任何指向成员的指针:structFoo{intm;intr;};templatestructB{//NextstatementDOESNOTWORK!staticintFoo::*constsaved_ptr_to_member=ptr_to_member;};//E

c++ - ADL 和 friend 注入(inject)

考虑这段代码:templatestructX{friendvoidf(X*){}};intmain(){f((X*)0);//Error?}编译器似乎非常不同意。(MSVC08/10说不是,GCC根据“C++模板-完整指南”:...itisassumedthatacallinvolvingalookupforfriendsinassociatedclassesactuallycausestheclasstobeinstantiated...AlthoughthiswasclearlyintendedbythosewhowrotetheC++standard,itisnotclearly

c++ - 这个 SFINAE 模式有名字吗?

在“太阳底下没有新鲜事”的规则下运作,我怀疑我是第一个想出这个把戏的人。我想我最终会偶然发现一些在线记录它的东西,但我还没有,所以我想我会问。它的目的是在不使用派生类的情况下有选择地启用某些相关的功能。这个图案有名字吗?有没有人有任何关于这种模式或类似运作模式的有用信息?templateclassPoint{public:templateusingEnable2D=typenamestd::enable_if::type;templateusingEnable3D=typenamestd::enable_if::type;templateusingEnable4D=typenamest

c++ - 可变参数模板类型推导

我看到了这篇很棒的文章:http://pdimov.com/cpp2/simple_cxx11_metaprogramming.html在下面的代码中:templateclassB>structmp_rename_impl;templateclassC,class...T,templateclassB>structmp_rename_impl,B>{usingtype=B;};templateclassB>usingmp_rename=typenamemp_rename_impl::type;//...mp_rename,std::tuple>;//->std::tuple//T...

c++ - 替换在模板参数推导中如何工作?

C++标准14.8.2$7说:Thesubstitutionoccursinalltypesandexpressionsthatareusedinthefunctiontypeandintemplateparameterdeclarations.Theexpressionsincludenotonlyconstantexpressionssuchasthosethatappearinarrayboundsorasnontypetemplateargumentsbutalsogeneralexpressions(i.e.,non-constantexpressions)insidesiz

c++ - g++-6 阴影模板参数错误,而 g++-5 没有

这个问题在这里已经有了答案:Canaparameterofatemplatetemplateparametercauseshadowing?(2个答案)关闭6年前。举个例子:#includetemplateclassContainer>std::vectorTo_Vector(Containerconst&c){returnstd::vector(c.begin(),c.end());}intmain(){}使用g++-5,编译没有错误:g++-5-omainmain.cppg++-6编译失败:g++-6-omainmain.cppmain.cpp:4:33:error:declara

c++ - MSVC2015 decltype 重载模板函数中的参数类型

下面的程序是否兼容C++11?如果是这样,您是否知道触发它的特定MSVC错误?和/或可能的解决方法?#includestructA{};structB{};constexprAaaa={};constexprBbbb={};templatevoidfoo(T,decltype(aaa)){std::coutvoidfoo(T,decltype(bbb)){std::cout如果将实际类型替换为decltype那么它就可以工作,但实际上这些类型太复杂而无法重现,我不希望它们有别名。 最佳答案 适用于我(VS2015/v140)并进行以

c++ - 模板参数可以同时是 int 和 unsigned long 吗?

我有以下代码:#includetemplateclassA{};templateclassB;templateclassB>{};intmain(){B>b;return0;}在这里,B被模板化为int而A被模板化为size_t,它是一个unsignedlong我正在使用的两个编译器。当我使用编译器1(当前编译器)时,一切都按照我期望的方式编译和工作。当使用编译器2(我们正在转向的编译器)时,我收到一个编译器错误,指出B没有采用unsignedlong的模板特化-它已解释3作为unsignedlong因为它需要是A的一个,但是对于B。修复很明显,-只需更改B也采用size_t(或更改A