草庐IT

c++ - lambda 的模板参数推导

我正在尝试制作一个辅助函数,如果给定的weak_ptr有效,则在调用时执行lambda/std::function。目前以下代码有效,但不幸的是,它需要我定义模板参数。我正在寻找一种通过自动模板参数推导来执行此操作的方法。templateautomake_dependent(std::weak_ptr&dependent,std::functionfunctor)->decltype(functor){return[&dependent,functor](ArgumentTypes...args){if(!dependent.expired()){functor(args...);}}

c++ - std::make_unique(以及 emplace、emplace_back)对 initializer_list 参数的笨拙推导

假设我有这个结构:structposition{intx,y;};和另一个将this作为构造函数参数的类:classpositioned{public:positioned(positionp):pos(p){}private:positionpos;};我怎样才能得到简单的autobla=std::make_unique({1,2});上类?目前,编译器试图通过initializer_list匹配并调用make_unique的数组变体,这很愚蠢,因为positioned只有一个构造函数。emplace出现同样的问题和emplace_back功能。几乎所有将其可变模板参数转发给类的构造

c++ - 推导多个参数包

背景我正在尝试为纯模板单元测试库编写一些模板函数,特别是针对Qt。问题在这个库中,我有一个可变参数模板,它接收可变数量的对象和仿函数(实际上是Qt5信号),它们总是彼此相邻配对,如QObject,signal,etc...中所示。然后最好跟着可变数量的信号参数。期望的解决方案//implementation.htemplatevoidtest_signal_daisy_chain(T*t,void(T::*t_signal)(Fargs...),U*u,void(U::*u_signal)(Fargs...),Sargs...sargs,Fargs...fargs){...}//cli

c++ - 创建与推导参数具有相同类型的局部变量的最简单方法是什么?

即:[](autoconst&foo){???bar;//shouldbesamebasetypeasfoo,minusconst&}到目前为止,我正在使用:typenamestd::remove_const::type>::typecombination但我真的希望有更简单的选择! 最佳答案 std::decay::type,或decay_t如果你的std库已更新。它模拟各种函数参数衰减。如果您的arg是函数引用,它会处理。在引用数组时,它也会生成一个指针,这不太理想。如果您想以不同的方式处理这些问题,则必须自己动手。

c++模板类型推导在强制转换运算符中失败

我已经将我稍微困难一些的问题简化为:http://coliru.stacked-crooked.com/a/2660b33492651e92#include#include#includetemplatestructget_type{Coperator()()const=delete;};templatestructget_type{std::stringoperator()()const{return"asd";}};templatestructget_type{size_toperator()()const{return6;}};structS{S(){}templateopera

c++ - 多语句 lambda 的返回类型推导

我一直在编写代码,最近我发现g++不会就某一类问题向我发出警告:根据C++115.1.2.4,如果您的lambda不是单个return语句,则返回类型必须声明为trailing-return-type或为void。虽然g++在足够合理的情况下被允许编译无效代码,但有没有办法关闭此行为(允许在g++-4.7中使用-fpedantic)或至少警告它?示例代码:[](){return0;}//isfine[&a](){a++;return0;}//isnotfinebutg++doesn'twarnme[&a]()->int{a++;return0;}//isfineagainC++115.

c++ - 使用右值/左值理解模板参数推导

这是来自functiontemplatedoesnotrecognizelvalue的跟进让我们玩一下下面的代码:#includetemplatevoidfunc(T&&){std::coutvoidfunc(constT&){std::cout(n);func(n);}它打印:inlvalueinrvalue我不明白第二次通话中发生了什么。如何编译解析模板参数?为什么没有任何歧义? 最佳答案 当你说func(n),没有参数推导,因为你指定了参数,所以选择在func(double&&)之间。和func(constdouble&).前

c++ - 如何从函数指针推导出参数列表?

给定两个或更多示例函数,是否可以编写模板化代码来推断作为模板参数提供的函数的参数?这是激励人心的例子:voiddo_something(intvalue,doubleamount){std::coutstructwrapper{usingArgs=/*???*/;voidoperator()(Args&&...args)const{Func(std::forward(args)...);}};intmain(){wrapperobj;//ShouldbeabletodeduceArgstobe[int,double]obj(5,17.4);//Wouldcalldo_something

c++ - 类型推导时间

我今天早些时候遇到了这个问题。在以下代码中:templatestructHolder{};templatestructHelper{usingT=Holder;};//???intmain(){autoa=typenameHelper::T();autob=typenameHelper::T();std::cout编译和执行时:g++test.cpp-std=c++11-otest./test它打印出1而不是0,这意味着Helper中的2个T和Helper是同一类型,这让我想知道:为什么标有//???的行对每个类型只执行一次而不是一次?有没有办法强制为每种类型执行一次该行,最好不要修改

c++ - 构造函数的模板参数推导

这个问题在这里已经有了答案:Whynotinfertemplateparameterfromconstructor?(12个答案)关闭5年前。C++0x是否具有(或者C++0x在某个时间点将具有)构造函数的模板参数推导?在AnOverviewoftheComingC++(C++0x)Standard,我看到了以下几行:std::lock_guardl(m);//at7:00std::threadt(f);//at9:00这是否意味着委托(delegate)make_foo函数模板最终是多余的?