草庐IT

Specialization

全部标签

c++ - 即使从未实例化引用变量主模板,是否也需要对其进行初始化?

在C++14中声明一个引用模板而不初始化主引用模板是否合法,只要它从未实例化?templateconstT&ref;templateautoref=1;autox=ref;这会在GCC和Clang上产生不同的结果:$g++-std=c++14-cref.cpp$$clang-std=c++14-cref.cppref.cpp:2:10:error:declarationofreferencevariable'ref'requiresaninitializerconstT&ref;^~~1errorgenerated.必须初始化主引用模板是没有意义的,因为在它被实例化之前,它是一个模板,

c++ - 如何防止 std::vector<bool> 的特化

我有一个模板类,它的数据成员类型为std::vector,其中T也是我的模板类的参数。在我的模板类中,我有很多这样做的逻辑:T&value=m_vector[index];当T是boolean值时,这似乎无法编译,因为std::vector的[]运算符不返回boolean引用,而是返回不同的类型。一些替代品(虽然我不喜欢其中任何一个):告诉我的用户他们不能使用bool作为模板参数对我的类进行bool的专门化(但这需要一些代码重复)有没有办法告诉std::vector不要专门用于bool? 最佳答案 对于T,您根本无法让模板化代码正常

c++ - 如何防止 std::vector<bool> 的特化

我有一个模板类,它的数据成员类型为std::vector,其中T也是我的模板类的参数。在我的模板类中,我有很多这样做的逻辑:T&value=m_vector[index];当T是boolean值时,这似乎无法编译,因为std::vector的[]运算符不返回boolean引用,而是返回不同的类型。一些替代品(虽然我不喜欢其中任何一个):告诉我的用户他们不能使用bool作为模板参数对我的类进行bool的专门化(但这需要一些代码重复)有没有办法告诉std::vector不要专门用于bool? 最佳答案 对于T,您根本无法让模板化代码正常

c++ - 一个模板专门化多个类

假设我们有一个模板函数“foo”:templatevoidfoo(Targ){...}我可以对某些特定类型进行特化,例如templatevoidfoo(intarg){...}如果我想对所有内置数字类型(int、float、double等)使用相同的特化,我会多次编写这些行。我知道body可以被扔给另一个函数,并且只需在每个特化的body中调用它,但是如果我可以避免为每种类型写这个“voidfoo(...”)会更好。有没有有没有可能告诉编译器我想对所有这些类型使用这个特化? 最佳答案 您可以使用std::numeric_limits

c++ - 一个模板专门化多个类

假设我们有一个模板函数“foo”:templatevoidfoo(Targ){...}我可以对某些特定类型进行特化,例如templatevoidfoo(intarg){...}如果我想对所有内置数字类型(int、float、double等)使用相同的特化,我会多次编写这些行。我知道body可以被扔给另一个函数,并且只需在每个特化的body中调用它,但是如果我可以避免为每种类型写这个“voidfoo(...”)会更好。有没有有没有可能告诉编译器我想对所有这些类型使用这个特化? 最佳答案 您可以使用std::numeric_limits

c++ - 模板类的大小

templatestructS{voidfoo(){sizeof(S);//(*)sizeof(S);}};intmain(){Ss;s.foo();return0;}这段代码编译得很好(VS2010),但我对(*)有疑问字符串。S不是完整类型,不像S在我看来,编译器怎么知道它的大小?标准对这种情况有什么看法,格式正确吗sizeof? 最佳答案 nameS里面的structS定义是指注入(inject)的类名S,根据14.6.1/2(C++03)不需要显式参数列表Withinthescopeofaclasstemplatespeci

c++ - 模板类的大小

templatestructS{voidfoo(){sizeof(S);//(*)sizeof(S);}};intmain(){Ss;s.foo();return0;}这段代码编译得很好(VS2010),但我对(*)有疑问字符串。S不是完整类型,不像S在我看来,编译器怎么知道它的大小?标准对这种情况有什么看法,格式正确吗sizeof? 最佳答案 nameS里面的structS定义是指注入(inject)的类名S,根据14.6.1/2(C++03)不需要显式参数列表Withinthescopeofaclasstemplatespeci

c++ - C++中模板特化的顺序

模板特化出现在代码中的顺序会改变程序的含义吗?如果是,那为什么?例子:源代码中的某处//specializationA...//specializationB...对比//specializationB...//specializationA...这总是会产生相同的结果吗? 最佳答案 Theplacementofexplicitspecializationdeclarationsforfunctiontemplates,classtemplates,memberfunctionsofclasstemplates,staticdata

c++ - C++中模板特化的顺序

模板特化出现在代码中的顺序会改变程序的含义吗?如果是,那为什么?例子:源代码中的某处//specializationA...//specializationB...对比//specializationB...//specializationA...这总是会产生相同的结果吗? 最佳答案 Theplacementofexplicitspecializationdeclarationsforfunctiontemplates,classtemplates,memberfunctionsofclasstemplates,staticdata

c++ - 没有参数的函数的模板特化

我需要在c++中专门化一个函数模板。templatevoiddoStuff(){}到templatevoiddoStuff();和templatevoiddoStuff();我猜这不是正确的语法(因为它没有编译)。我该怎么做呢?另外,由于我在doStuff中没有未定义的模板参数,是否可以在.cpp中声明正文?注意:doStuff将在其主体中使用T来声明变量。 最佳答案 主模板没有获得第二对模板参数。就是这样:templatevoiddoStuff(){}//^^^^^^^^^只有专精具有template在前面和在名称之后,例如:te