草庐IT

template-specialization

全部标签

c++ - 我应该怎么做而不是函数模板的部分特化?

我想写以下内容:templatevoidfoo(){/*codeforthegeneralcase*/}templatevoidfoo(){/*partiallyspecializedcode-foranykindofT,butwhenSisMySType*/}或者,在其他情况下,以下内容:templatevoidbar(constS&a,constT&b){/*codeforthegeneralcase*/}templatevoidbar(constMySType&a,constT&b){/*partiallyspecializedcode-foranykindofT,butwhen

c++ - 在每个源文件中替代 "extern template"

我正在开发一个库,其中我们的许多核心对象都是模板,其中一个特定实例以指向该模板实例的智能指针的形式出现在项目的大多数文件中。我在单个源文件中明确实例化了这些模板。我们最近切换到C++11,我正在尝试使用新的externtemplateclassMyTemplate;加快编译速度。我的第一个问题是我是否在周围使用智能指针MyTemplate正在隐式实例化模板并要求文件顶部的“外部模板..”以避免重复实例化。我的第二个问题是是否有一些替代方法来添加所有这些externtemplateclassMyTemplate;到每个源文件。为我定义的每个模板搜索智能指针的每个实例并确保我在该文件中有正

C++ : Check if the template type is one of the variadic template types

这个问题在这里已经有了答案:Checkifatypeispassedinvariadictemplateparameterpack(3个答案)关闭7年前。假设我们有函数:templatevoidfoo(){...};检查“Kind”类型是否是C++(包括C++1z)中的“Kinds”类型之一的最简单方法是什么?

c++ - 模板调用 : Actual specialization not called

#includeusingnamespacestd;templatevoidtest(){coutvoidtest(){cout();//expectedoutput2butactualoutput1}为什么输出是1而不是2? 最佳答案 test(注意:末尾没有括号)会产生您期望的结果。写成test用“不带参数并返回std::string的函数”类型实例化模板 关于c++-模板调用:Actualspecializationnotcalled,我们在StackOverflow上找到一个类似

c++ - std::map.insert "could not deduce template argument for..."

我正在尝试熟悉STL库,但我无法理解我的编译错误。我使用编译器错误字符串“无法推断...的模板参数”搜索了其他问题,但没有一个答案似乎适用或相关。Error4errorC2784:'boolstd::operator&,conststd::unique_ptr&)':couldnotdeducetemplateargumentfor'conststd::unique_ptr&'from'conststd::string'c:\programfiles(x86)\microsoftvisualstudio10.0\vc\include\xfunctional125我正在编写一个简单的解释

c++ - 为什么 std::map 没有 find/lower_bound 重载,std::list 没有 sort 重载?

我知道你不应该使用std::find(some_map.begin(),some_map.end())或std::lower_bound,因为它会采用线性时间而不是some_map.lower_bound提供的对数时间。std::list也会发生类似的事情:有用于排序的std::list::sort函数,但您无法调用std::sort(some_list.begin(),some_list.end()),因为迭代器不是随机访问的。但是,例如,std::swap具有标准容器的重载,因此swap(some_map,other_map)的调用需要O(1),而不是在)。为什么C++标准不为ma

C++模板函数,替换失败跳过实现

我有下面的代码只是为了测试,模板函数用了两次,第一次没问题。在第二种情况下,我创建了一个指针并将该指针作为引用传递给模板函数。我预计“obj.~T()”行编译时间失败。但实际上代码编译并运行良好。当我通过函数调试时,程序只是跳过obj.~T();我正在使用VC10。我的问题是:1.这是预期的行为吗?如果它基于c++standrade的哪一部分?2.这种行为有什么利弊吗???就我而言,这很好,因为没有编译错误,也没有运行时错误。但是可能会有一些我不知道但确实损坏了代码的情况。谢谢templatevoidptrDest(T&obj){obj.~T();}classDummy{public:

c++ - 有人可以解释一下这段代码中使用 BaseTypeX::BaseTypeX 吗?

我有一些代码正在执行以下操作,但我不明白usingBaseTypeX::BaseTypeX其实就是在这段代码中做的。其余部分我都理解,所以请不要解释模板特化等。templateclassClassX:publicInternal::ClassXImpl{public:usingBaseTypeX=Internal::ClassXImpl;usingBaseTypeX::BaseTypeX;//whatisthisdoingexactly?inlineClassX()noexcept=default;//memberfunctiontemplateinlineClassX(TThis*a

C++构造函数模板特化

我正在尝试为std::string参数创建一个专门的构造函数,但当我使用字符串参数调用它时,总是会使用另一个构造函数。structLiteral:Expression{templateLiteral(Vval){value=val;}};templateLiteral::Literal(std::stringconst&val){value=val.c_str();}两者是在类内定义还是在类外定义都没有关系,或者像发布的示例一样,只有特化是在类外定义的:当使用std::string调用时,赋值value=val给出编译器错误。我如何为std::string正确特化此构造函数模板?

c++ - 为什么我不能将 std::unique_ptr 用作 "template<class> class"参数?

这段代码:#includetemplateclassPtr>classA{Ptrints;};usingB=A;产生以下错误(使用GCC6.3):a.cpp:6:28:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassPtr>classA’usingB=A;^a.cpp:6:28:note:expectedatemplateoftype‘templateclassPtr’,got‘templateclassstd::unique_ptr’现在,我可以像这样解决这个问题:templateu