草庐IT

模板化类中 typedef 的 C++ 错误

我正在尝试编写一个简单的模板化事件调度程序,但我遇到了我不理解的编译器错误,搜索它也没有任何帮助。我正在使用VisualStudio2013Express。这是我的代码:templateclassEventDispatcher{public:typedefvoid(EventHandler)(Tevent);EventDispatcher(){}~EventDispatcher(){}voidaddListener(conststd::stringeventName,EventHandlerhandler){}voidfireEvent(Tevent){}private:typedef

c++ - 我可以强制可变参数模板采用特定类型的参数吗

在C++模板中有一个概念叫做显式模板参数规范,这意味着我可以强制编译器创建给定类型的模板函数。例如templatevoidfoo(T1t1prm,T2t2prm){/*functionbody*/}foo(1,2);我可以用可变模板函数做类似的事情吗?我没有特定的用例。Variadic模板对我来说是新的,我只是想了解新的(嗯,对我来说)概念的功能。 最佳答案 是的。templatevoidf(constArgs&...args){}intmain(){f(1.0,2,3.0);}这里会调用函数f.你可以这样检查templatevoi

c++ - 使用指针作为模板非类型参数

我想使用数组指针(使用数组算法)作为非类型参数。我知道参数应该在编译时已知,但固定大小的全局数组不是这样吗?这个例子可以打印前两行,但不能打印第三行。有什么解决方法吗?编辑:我不仅在寻找aa+1的答案,而且还在寻找所有aa+i的答案,其中i小于aa的大小#includevoidprint(intn){printf("thevalueis:%d\n",n);}templatevoidmyWrapper(){print(*n);}voidmyCall(void(*CALLBACK)(void)){CALLBACK();}inta=1;intaa[4]={2,3,4,5};intmain()

c++ - Typedef、模板和 const 关键字

我在使用带有const关键字(用于函数参数类型)的模板时遇到问题,为了说明这一点,我创建了一个小代码:templatestructMethodCallerFactory{typedefReturnType(*Type)(ClassType*,Args...);templatestructMethod{staticTypecreateMethodCaller(){ReturnType(*caller)(ClassType*,Args...)=[](ClassType*obj,Args...args)->ReturnType{ReturnType(ClassType::*ptr)(Args

c++ - 模板代码中的 float 或 double

下面的例子可能看起来很荒谬,但它是一个更大的高性能代码的一部分,在这个代码中所介绍的技术是有意义的。我提到这一点是为了防止有人怀疑XY问题——很可能不是。我有一个带有模板化/编译时操作数的函数:templateintmul(intx){returnM*x;}现在我想对double做同样的事情,这是-当然-不允许的:template//youcan'tdothat!intmul(doublex){returnM*x;}所以为了在编译时仍然放入double,我只看到以下解决方案://createmyconstantsstructSevenPointFive{staticconstexprd

c++ - 使用 std::result_of 确定模板参数的返回类型

我认为这段代码是不言自明的,但基本上模板函数ExecFunc应该能够执行另一个函数并返回其结果。我知道我可以使用decltype而不是result_of获得类似的结果,但这个问题是为了理解为什么我写的东西不起作用:该片段无法在gccv4.9.2上编译。这是我的:#includeintf(inti){returni;}templateautoExecFunc(Ff,Targ)->typenamestd::result_of::type{returnf(arg);}intmain(){autoa=ExecFunc(f,3);return0;}这是编译器的输出:prova.cpp:Infun

c++ - “T”不是参数 'T' 的有效模板类型参数

我编写了一个程序,使用类在C++中将排序数组转换为BST。我收到以下错误:errorC2143:syntaxerror:missing';'before'*'errorC4430:missingtypespecifier-intassumed.Note:C++doesnotsupportdefault-interrorC2065:'T':undeclaredidentifiererrorC2923:'Binary_Search_Tree':'T'isnotavalidtemplatetypeargumentforparameter'T'以下是我的程序:templateclassBina

c++ - 如何让编译器为我推断出正确的模板整数

考虑这件作品:templatevoidfill_with_magic(array&whatever){for(inti=0;i我通过特定实例调用它,所以对于3的数组我必须这样做:arraysome_array_of_3;fill_with_magic(some_array_of_3);但我真的必须写吗??编译器已经知道数组大小,因此理论上它可以根据该大小推断出正确的实例。我真的可以做到吗? 最佳答案 问题是参数的推导:std::array的第二个模板参数不是int所以扣除不会发生,因为它需要转换。你应该将你的方法定义为templat

c++ - 当模板类 is_convertible 为众所周知的类型时,特化仿函数

所以我想在模板类型boost::is_convertible时应用特定代码至WellKnownType:templateclassFoo{public:Foo(){//applyspecificfunctiontom_t//ifTisconvertibletoWellKnownType}Tm_t;};为此,我想到了使用仿函数:templatestructmy_functor{voidoperator()(T&t){//donothingbydefault}};然后,我想在boost::is_convertible时特化这​​个仿函数来做其他事情。:templatestructmy_fu

c++ - 获取模板化对象方法的返回类型

说我有:templatestructFoo{T&func();};然后我实现了一个Foo:Foobar现在我想获得bar.func()的返回类型.我一直在努力强制result_of与我合作但无济于事。我真正想要的是能够做到result_of_t并完成它,但我想这要困难得多?我应该如何获得这种返回类型?编辑:我希望在不考虑bar的情况下实现这一目标被宣布。也就是说,我只想能够通过bar.func进入result_of或类似的并输出返回类型。 最佳答案 std::result_of实际上使用起来很烦人。它的语法是:result_of在哪