草庐IT

partial-specialization

全部标签

c++ - 模板偏特化问题

我正在尝试为数学编程编写一个大小和类型通用vector类。我在部分特化方面遇到问题。当我尝试针对给定大小特化我的vector类的成员方法时出现问题。我可以举一个简单的例子:templateclassTestVector{public:inlineTestVector(){}TestVectorcross(TestVectorconst&other)const;};templateinlineTestVectorTestVector::cross(TestVectorconst&other)const{returnTestVector();}voidtest(){TestVectorve

c++ - 具有非类型参数包的模棱两可的类模板实例化

我试图专门化Expr:#include#include#includetemplatestructExpr{Expr(){std::coutstructExpr...>>{Expr(){std::coutstructExpr...>>{Expr(){std::cout>mylist;Exprtest{};return0;}但是,我遇到了以下编译器错误:[x86-64gcc6.3]error:ambiguoustemplateinstantiationfor'structExpr>>'[x86-64gcc6.3]error:variable'Expr>>test'hasinitializ

c++ - 指向函数的模板指针的部分模板特化

考虑以下抽象订阅类:templateclassSubscription{public:virtual~Subscription(){}virtualboolhandle(constTMessage&)=0;};在某些情况下,如果单独一个类可以多次实现这个抽象类会很方便-即使对于同一个TMessage-和不强制继承。为了实现这一点,我使用模板指针以下列方式运行:templateclassInvoker:publicSubscription{public:Invoker(TCaller*caller):m_caller(*caller){}virtualboolhandle(constTM

c++ - 为什么类内偏特化是良构的?

根据[temp.class.spec]5/(强调我的)Aclasstemplatepartialspecializationmaybedeclaredorredeclaredinanynamespacescopeinwhichthecorrespondingprimarytemplatemaybedefined这表明部分特化(就像显式特化一样)必须出现在命名空间范围内。该段下方的示例实际上证实了这一点:templatestructA{structC{templatestructB{};};};//partialspecializationofA::C::Btemplatetemplat

C++ 微软 : How to associate uuid/guid with template specialization

我想将uuid/guid与模板特化相关联。以下代码可用于将uuid与非模板接口(interface)(类、结构)相关联:__interface__declspec(uuid("CECA446F-2BE6-4AAC-A117-E395F27DF1F8"))ITest{virtualvoidTest()=0;};GUIDguid=__uuidof(ITest);//OK现在我有了一个模板化的界面template__interfaceITemplateTest{virtualvoidTest(Tt)=0;};我想做以下工作:GUIDtemplateGuid=__uuidof(ITemplat

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - range-v 3's ` partial_sum` 如何不与非拥有引用语义相矛盾?

考虑HowdoIwritearangepipelinethatusestemporarycontainers?.问题是如何使用一些给定的函数构建一个View来转换每个元素Tstd::vectorf(Tt);同时遵守therestriction(从那里的最佳答案借用)Aviewisalightweightwrapperthatpresentsaviewofanunderlyingsequenceofelementsinsomecustomwaywithoutmutatingorcopyingit.Viewsarecheaptocreateandcopy,andhavenon-owning

c++ - 在模板类中定义的枚举上嵌套类的部分特化

请看下面的代码:templatestructX{enumclassE{e0};templatestructY{};templatestructY{staticintf(){return0;}};};intmain(){X::Y::E::e0>::f();}VC++15.7.5生成错误消息:1>test.cpp1>some_directory\test.cpp(15):errorC2039:'f':isnotamemberof'X::Y::E::e0>'1>some_directory\test.cpp(15):note:seedeclarationof'X::Y::E::e0>'1>s

c++ - 谷歌模拟 : why is a partial ordering of expectations harder to satisfy than a total ordering?

我主要在GoogleMock中使用有序期望,因此所有EXPECT_CALL都写在testing::InSequence对象的范围内。现在我想放宽顺序,所以我将期望分为2个序列。你会说测试应该通过,但没有-它失败了,提示未满足的先决条件。我该如何推理?编辑:我的代码的缩减版本://InSequences;//uncommentthisanditworksfor(inti=1;i(val1),Return(false))).WillOnce(DoAll(SetArgReferee(val2),Return(false))).WillOnce(DoAll(SetArgReferee(val2

c++ - 部分特化消歧优先链的更好模式?

考虑以下系列的偏特化:templatestructfoo{voidoperator()()const{coutstructfoo::value>>{voidoperator()()const{coutstructfoo::value>>{voidoperator()()const{coutstructfoo::valueandnot(sizeof(T)==4)andnotis_integral::value>>{voidoperator()()const{coutLiveDemo我经常看到这种情况(事实上,anotherStackOverflowanswerelsewhere为类似问题