草庐IT

c++ - Visual C++ 无法推断在 ctor 中用作默认值的函数的给定(!)模板参数

我正在尝试使用模板函数返回模板类构造函数中参数的默认值。函数的模板参数也是类的模板参数。我在下面提供了一个示例。背景该示例显示了确切的用例和依赖项,因为它们也出现在我的应用程序中。X类实际上是一个相当大的类,它管理一个大数据block,该大数据block被分成更小的block。类助手是一个内存管理器,它以较小的block大小分配和释放内存。实际上,GetHelper函数会在运行时尝试推导出Helper的一些构造函数参数,所以这就是我使用这种设计的原因。实际问题当定义了宏USE_NS和SHOW_ERROR时,代码无法编译,在第66行给出错误C2783无法推断模板参数。这是我尝试使用模板函

c++ - C++ 模板可以推断返回类型吗?

我正在研究模板,想知道是否有任何方法可以使这样的代码正常工作。templateTfoo(inta){returna*2;}intsomething=foo(123);这里的问题是编译器无法推断类型。我知道如果我在上述情况下使用它会起作用。inta=foo(123);甚至templateTfoo(Ta){returna*2;}inta=foo(123);编辑:为了澄清,我想知道是否有可能让代码在像这样使用时返回一个doubledoublex=foo(123);而在像这样使用时返回一个intintx=foo(123);。 最佳答案 推断

c++ - 如何推断元函数的类型及其模板参数?

假设我有一个元函数,它需要类型和它的参数。如何在不强制函数用户单独提供类型及其参数的情况下执行此操作?usingMyType=SomeType;//ThisisthetypetopasstothefunctortemplatestructMetaFunction{usingtype=SomeOperation;}//Iwanttobeabletocallmyfunctorlikethis:MetaFunction::type;//butwiththeaboveIhavetocallitlikethis:MetaFunction::type;我该怎么做? 最佳

c++ - 禁止自动类型推断

我有以下演示代码:templateTfunc(constU&t){returni*t;}templateTfunc(constT&t){return2*i*t;}intmain(){returnfunc(1);}这是我真实代码的精简版,所以它看起来没什么用,但应该足以说明问题了:Infunction‘intmain()’:11:23:error:callofoverloaded‘func(int)’isambiguous11:23:note:candidatesare:2:3:note:Tfunc(constU&)[withinti=1,T=int,U=int]5:3:note:Tfu

C++ - 在整个类中使用从构造函数推断的模板参数作为模板参数

我想在整个类(class)的其余部分中使用从构造函数参数中推断出的类型作为模板参数。这可能吗?像这样:classAnyClass{public:templateAnyClass(C*c){//classCisinferredbyconstructorargument}//constructorargumentisusedasargumentinothertemplatetypesnestclassmyNestedClass;voidrandomfunction(C*randonarg){}}详细信息:事情是这样的。我正在尝试根据继承类的类型初始化我的基类型。在下面的例子中,Derive

c++ - auto 是如何推断类型的?

我有一些auto的使用案例:autos=expr;//sisalwayslvalueauto&s=expr;//sisalwayslvaluereference?Whatifexprisrvalue?auto&&s=expr;//sisperfectlyforwarded它们是真的吗?如果不是,为什么? 最佳答案 dyp是正确的,我想详细说明。首先,结论是来自dyp的:Thetypededucedforautointhedeclarationofavariableisdefinedviatherulesoftemplateargum

c++ - 推断函数指针或仿函数的返回类型

我正在尝试推断可调用类型的返回类型,即函数指针或仿函数。我之前问过并得到了一个答案,展示了如何为函数指针执行此操作,并提示如何为仿函数执行此操作。FunctionreturntypedeductioninC++03基于此,我有了这个辅助结构,它现在适用于仿函数,但不再适用于函数指针。//functorstemplatestructReturn;{typedeftypenameT::result_typetype;};//functionpointerstemplatestructReturn{typedefRtype;};这适用于提供result_type的合作仿函数typedef但不

c++ - error C2783 无法推断模板参数

我被这个错误困住了。我也找到了一个解决方法,但它有点扼杀了锻炼的全部目的。我正在尝试创建一个函数,它将使用两个指向同一个容器的迭代器。我会找到它们之间的元素总和。我为像vector这样的顺序容器创建了通用函数,它工作正常。我为关联容器重载了相同的函数。这是给出错误的地方。mapmyMap;myMap["B"]=1.0;myMap["C"]=2.0;myMap["S"]=3.0;myMap["G"]=4.0;myMap["P"]=5.0;map::const_iteratoriter1=myMap.begin();map::const_iteratoriter2=myMap.end();

C++ count_if 函数 - 无法推断模板

我正在尝试使用C++的count_if函数来查看std::string中有多少个十六进制数字。当我尝试以下操作时:strings="123abc";cout我收到以下错误:count.cpp:14:13:error:nomatchingfunctionforcallto'count_if'cout但是,当我使用::isxdigit时,程序会编译并运行。我知道在::之前添加与在全局范围内使用isxdigit有关,但我不确定为什么它在这种情况下有帮助。我也认为它与C++语言环境有关,但我对它们不太熟悉。谢谢! 最佳答案 有一个函数int

c++ - 使用类定义中的推断维度初始化静态常量多维数组

从C++11开始,可以在类定义中初始化staticconst内置类型,如下所示:classA{public:staticconstunsignedintval=0;//allowed};但是,在VisualC++2013中使用数组执行此操作会给我一个错误,告诉我这是不允许的:classB{public:staticconstunsignedintval[][2]={{0,1}};//notallowed};错误消息只是“constunsignedint[][2]类型的成员不能有类内初始化程序。”相反,我被迫执行以下操作:classC{public:staticconstunsigned