草庐IT

c++ - 模板和单独编译

我想用C++编写一个单独编译的程序,我这样写:主要.cpp#include#include"Stack.h"usingnamespacestd;intmain(intargc,char*argv[]){Stackst;st.push(1);return0;}堆栈.h#ifndef_STACK_H#define_STACK_HtemplateclassStack{private:structNode{Node*_prev;T_data;Node*_next;};int_size;Node*_pos;public:Stack();Tpop();voidpush(Tconst&el);int

c++ - 我如何为 tr1::unordered_map 定义一个不绑定(bind)模板参数的宏/typedef/etc?

这可能是个有点傻的问题,但我不得不问。我正在尝试在C++中使用unordered_map类,但不是每次都将其作为tr1::unordered_map引用,我只想使用关键字hashMap。我知道typedeftr1::unordered_maphashMap有效,但这种修复了键的数据类型和对应于hashMap的值,而我希望有更多类似以下内容:#definehashMaptr1::unordered_map我可以根据需要定义键和值的数据类型,但这不起作用。以前有人遇到过这个问题吗?谢谢 最佳答案 这是C++11之前的C++所缺少的东西。

c++ - 使用仿函数提供函数或运算符作为 C++ 模板参数的性能损失?

我有一系列复杂的函数执行非常相似的任务,除了函数中间的一个运算符。我的代码的简化版本可能是这样的:#includestaticvoidmemopXor(char*buffer1,char*buffer2,char*res,unsignedn){for(unsignedx=0;x使用C++模板避免重复代码看起来是一个很好的案例,因此我正在寻找一种方法将我的代码更改为如下所示(伪代码):#includetemplatevoidmemop(char*buffer1,char*buffer2,char*res,size_tn){for(size_tx=0;x(b1,b2,res1,5);ass

c++ - 模板 typedef c++0x

我发现了几个关于C++0x中模板类型定义的问题,这些问题通过using关键字解决;然而,使用GCC4.6.1(运行g++-std=c++0x),我得到以下错误:错误:在“使用”之前需要不合格的id你能帮我找出我哪里出错了吗?几个小时以来我一直在努力解决这个问题......代码:#includetemplateclassGenericSparseVector{protected:std::mapindices_to_values;};templateusingStandardSparseVector=GenericSparseVector; 最佳答案

c++ - 如何在模板化基类中命名嵌套模板?

在下面的设置中,我该怎么做才能引用名称Bar在派生类内部Derived?templatestructFoo{templatestructBar{};};templatestructDerived:Foo{//whatgoeshere?Barx;//Error:'Bar'doesnotnameatype};我试过了usingFoo::Bar;,但这无济于事。有没有什么using可以使派生类知道嵌套基模板名称的声明,这样我就可以保留简单的声明Barx?我知道我可以说typenameFoo::templateBarx;,但我有很多这样的情况,我不想用如此冗长的代码不必要地增加代码负担。我也有

c++ - 以下模板函数的含义?

#defineCreate_Function(Type)\templatevoidFunction(std::vector>&)Create_Function(std::string);我在遗留代码中看到了上面的代码,但不知道它的含义。它既不是常规的非专用函数定义,也不是完整的专用函数定义。有什么想法吗? 最佳答案 它执行显式模板实例化(参见MSDN)Explicitinstantiationletsyoucreateaninstantiationofatemplatedclassorfunctionwithoutactuallyu

c++ - 具有三元的简单 C++11 constexpr 阶乘超出了最大模板深度

如果我使用专门化编写编译时阶乘函数,则以下代码就足够了,并将正确提供120作为fact1()的结果:templateconstexprsize_tfact1(){returnN*fact1();}templateconstexprsize_tfact1(){return1;}但是,对于单个函数体和三元运算符,如以下代码所示,G++4.7和Clang++3.2都超过了它们的最大模板实例化深度。看来1永远不会从fact2返回.为什么fact2()的定义是这样的?不返回120?templateconstexprsize_tfact2(){returnN==0?1:N*fact2();}

c++ - 为什么在这种情况下 c++ 模板参数推导失败?

我正在尝试编写自己的委托(delegate)系统来替代boost::functions,因为后者做了很多我认为有问题的堆分配。我已经写了这个作为替换(简化,实际使用池内存和新位置,但这很简单,可以重现错误):templatestructDelegateFunctor:publicMyFunctor{DelegateFunctor(void(*fptr)(A,B),Aarg1,Barg2):fp(fptr),a1(arg1),a2(arg2){}virtualvoidoperator()(){fp(a1,a2);}void(*fp)(A,B);//Storesthefunctionpoi

c++ - 类定义之外的部分模板特化

我可以在类声明中使用部分模板特化templatestructA{voidfoo(){coutstructA{voidfoo(){cout但是当我试图在类声明之外做这件事时templatestructA{voidfoo();};templatevoidA::foo(){coutvoidA::foo(){cout我收到以下错误:invaliduseofincompletetype«structA»当您想要重新定义所有成员时,使用第一种方法没有问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?那么,是否可以在类定义之外使用部分模板特化? 最佳答

c++ - 如何将从模板参数派生的编译时信息添加到模板?

我尝试使用Stroustrup在GoingNative2012上展示的用户定义文字来实现单元。(从23:00分钟开始)。这是代码:#includeusingstd::cout;usingstd::endl;templatestructUnit{//aunitintheMKSsystemenum{m=M,kg=K,s=S};};template//amagnitudewithaunitstructValue{doubleval;constexprValue(doubled):val(d){}};usingMeter=Unit;usingSecond=Unit;usingDistance=