草庐IT

c++ - 使用可变参数模板进行统一初始化

我有一个PODChParam,它是可变参数模板函数set中的一个参数。我想在花括号p.set({Param::D,1000.f},{Param::p,2000.f})中传递给函数参数(构造函数参数)。并认为将隐式调用构造函数并创建ChParam对象。但这是不可能的,我应该明确地创建一个对象a.set(ChParam{Param::D,1000.f},ChParam{Param::p,2000.f});是否有可能以某种方式使用变体p.set({Param::D,1000.f},{Param::p,2000.f})?#includeusingnamespacestd;usingFloat=

c++ - 模板类中的类模板特化

重构遗留代码我想合并彼此相关的单独模板类/结构(以避免命名空间污染)。Nested(下)是MyStruct的辅助类,我想将其移入MyStruct。但我无法完成这项工作:#include#includestructYES{};structNO{};templatestructMyStruct{templatestructNested{staticvoidPrint(void){std::cout::Print()"structNested::value,YES>::type>{staticvoidPrint(void){std::cout::Print()"编译器提示:g++-O0-g3

c++ - 为什么 C++ 不允许在非模板函数中使用可变参数?

intfoo(inti){returni;}intfoo(inti,int...n){returni+foo(n...);}intmain(){returnfoo(1,2,3);//error}为什么C++不允许这种直观的语法? 最佳答案 您需要模板机制来实例化您的第二个foo函数,因为函数的签名仅在使用时确定。因此,您在这里可以要求的唯一功能是,您的语法暗示了一个函数模板,其中模板参数包被限制为类型int。不过,对于没有template关键字的模板,存在相当大的反对意见。然而,ConceptsTS在这方面会有所改变。

c++ - 是否有标准的静态函数包装器类型模板?

我正在寻找一个标准的C++14类型模板,它静态地(在编译时)嵌入一个函数引用作为模板参数,并将operator()实现为对引用函数的转发调用.我知道std::function存在,但它存储一个函数指针作为数据成员。我希望将函数引用嵌入到类型签名中,以便包装器类型为空和默认构造。我有一个有效的实现(带有示例用例):#include#include#include//Implementation:templatestructfn_t{templatestructfn_ref{Retoperator()(Args&&...args)const{returnFunc(std::forward(

c++ - 可变参数模板不适用于初始值设定项列表

我创建了一个工厂函数模板:templatestd::shared_ptrcreate(Args...args){returnstd::make_shared(args...);}还有一个简单的容器:structGroup{std::vectorvec;Group(std::initializer_listil):vec(il){}};然后我尝试创建一个组intmain(){autogr=create({1,2,3});return0;}这不编译,error:nomatchingfunctionforcallto'create'autogr=create({1,2,3});candida

c++ - 来自 cppreference.com 的模板参数特化示例不起作用

我在http://en.cppreference.com/w/cpp/language/partial_specialization上找到了这个例子templatestructB{};templatestructB{};//OK:firstparameterisdeducible我在使用-std=c++11和-std=c++14编译时出错如何编译这个?或者也许例子是错误的?error:templateargument‘(I*2)’involvestemplateparameter(s)templatestructB{};//OK:firstparameterisdeducible

c++ - 如何为 std::unique_ptr 创建一个有效的 C++ 别名模板

我想为std::unique_ptr创建一个别名模板来提供我自己的删除函数。unique_ptr有一个标量和一个数组实现,它们是这样定义的:template>classunique_ptr//scalartemplateclassunique_ptr//array我在尝试覆盖unique_ptr的标量和数组版本时遇到了麻烦。只为一个版本创建别名很容易,如下所示:templatestructDeleter{voidoperator()(T*ptr){deleteptr;}};templateusingmy_unique_ptr=std::unique_ptr>;但是当我尝试添加第二个别名

c++ - 如何使用 C++ 模板执行正式协议(protocol)?

当使用templatestyle固有的编译时鸭子类型时,有什么方法可以强制要求模板参数实现具有特定签名的特定方法?structProtocolT{voidg()const;voidh();}//IwantthecompilertocheckthatTconformstoProtocolT//thatis,Tmustimplementg()andh()ratherthanjustg()templatevoidf(constT&x){x.g();}当然,即使没有这个,也有完美的类型安全:如果模板参数T没有在模板函数实现中使用的方法,编译器总是会报错。但我发现明确声明classT必须具有某些

c++ - 从类定义中推导模板参数类型

是否可以使用classtemplateargumentdeduction上课C来自C之一的定义内的成员函数?...还是我被迫写我的make_c类似于C++03中的辅助类?考虑这个构建任意函数对象链的最小化和简化场景:templatestructnode;templatenode(FFwd&&)->node>;node类存储一个通过完美转发初始化的函数对象。我需要一个演绎指南这里decay函数的类型对象。templatestructnode{F_f;templatenode(FFwd&&f):_f{std::forward(f)}{}templateautothen(FThen&&f_t

c++ - 为什么只有一些 C++ 模板实例导出到共享库中?

我有一个C++动态库(在macOS上),它有一个模板化函数,带有一些在公共(public)API中导出的显式实例化。客户端代码只能看到模板声明;他们不知道其中发生了什么,并且依赖这些实例化在链接时可用。出于某种原因,这些显式实例中只有一部分在动态库中可见。这是一个简单的例子://libtest.cpp#defineVISIBLE__attribute__((visibility("default")))templateTfoobar(Targ){returnarg;}templateintVISIBLEfoobar(int);templateint*VISIBLEfoobar(int*