草庐IT

C++模板特化方法问题

我是C++的新手,我正在尝试使用模板,但我遇到了问题。我想做的是:尝试使用模板计算一个数字的平方,这个数字可能是基本数据类型,如int、float,也可能是复数。我还用模板实现了一个复杂的类,代码如下:templateclassComplex{public:Treal_;Timg_;Complex(Treal,Timg):real_(real),img_(img){}};templateTsquare(Tnum){returnnum*num;}templateComplexsquare(Complexnum){Ttemp_real=num.real_*num.real_-num.img

c++ - Boost Spirit 规则和语法中模板参数中的括号

查看thisexample为了实现Spirit解析器,当我尝试编写类似的东西时,有件事让我着迷。语法的属性模板参数(std::map())和规则的签名模板参数(例如qi::rulekey,value)包含括号。namespaceqi=boost::spirit::qi;templatestructkeys_and_values:qi::grammar()>//>*((qi::lit(';')|'&')>>pair);pair=key>>-('='>>value);key=qi::char_("a-zA-Z_")>>*qi::char_("a-zA-Z_0-9");value=+qi::

c++ - C++模板成员指针属性实现的一些问题

我的目标是像在C#中一样在C++中创建属性-具有重要的设置/获取行为。在这里,Property的对象包含对prop及其set/get方法的master的引用。Property.h的实现、内容:#includeusingnamespacestd;namespaceFirst{templatestructProperty{Master&master;constType(Master::*&get)()const;Type(Master::*&set)(Typevalue);Property(Master&master,constType(Master::*get)()const,Type(

c++ - 函数接受模板类的内部类的问题

我对类模板中的内部类有疑问。我有一个模板类(例如:Matrix)和一个子类(例如:Matrix::Row)。现在我想写一个函数来操作子类的实例(比如:negate(Matrix::Row&))。我试图用templatenegate(typenameMatrix::Row&)声明函数,但是当我尝试使用它时,编译器告诉我找不到匹配项。这是一个抽象的例子:templateclassA{public:classB{};};templatevoidx(typenameA::B&){}intmain(){A::Bb;x(b);//doesn'twork:Error:Couldnotfindamat

c++ - 将类模板声明为友元

出于某些原因,我想编写如下代码:templateclassC:publicT{friendclassT;};我认为代码很清楚。我想要一个类模板,它定义了一个从作为模板参数传递给它的类派生的类,为了让事情变得更复杂一点,我想将基类定义为派生类的友元。MSVC编译器的代码似乎没问题,但GNUC++编译器提示很多。我应该怎么做才能获得所需的功能? 最佳答案 它的格式不正确,并且不是有效的C++,尽管它可以在MSVC中运行。C++03标准这样说(7.1.5.3§2):3.4.4describeshownamelookupproceedsfo

c++ - 为什么 const 模板化引用类型不同于 const 引用类型?

考虑这个模板:templateclassfoo{typedefconstRefTconst_ref_t;typedefconstT&another_const_ref_t;//...};我假设类型const_ref_t和another_const_ref_t将是等效的。两者都是constT&的。但他们不是。唉,下面对它们不等价的证明是相当详尽的。它取决于使用dynamic_cast检查另一个类的类型。classabstractBase{public:virtual~abstractBase(){}};templateclassotherClass:publicabstractBase{

c++ - 满足条件的多种类型的模板类特化

如果我有一个模板类,像这样:templateclassType{/*...*/};在不以任何方式修改Type的情况下,是否有一种简单的方法可以针对所有匹配编译时条件的此类类型专门化它?例如,如果我想为所有整数类型专门化Type,我想做这样的事情(只有有效的事情,即):templateclassType,T>::type>{/*...*/}; 最佳答案 这应该有效:template::value>classType;//doesn'thavetobeaspecialization,althoughIthinkit'smoreclear

c++ - 如何正确地进行显式模板实例化?

我正在使用模板来实现CRTP模式。使用下面的代码,我得到链接器错误(对于基类CPConnectionBase中定义的所有方法),如下所示:errorLNK2001:unresolvedexternalsymbol"public:void__thiscallCPConnectionBase::start(void)"(?start@?$CPConnectionBase@VTNCPConnection@@@@QAEXXZ)我想这里的解决方案是显式模板实例化。事实上,我可以在添加时构建我的代码#include"TNCPConnection.h"templateclassCPConnectio

c++ - C++模板实例化的时机

我想知道是否有人知道为什么以下两段代码的行为非常不同。我能理解为什么第二个不起作用,但为什么第一个起作用?在同一个地方intx=gc.f();模板应该被实例化,所以会出现同样的错误,但为什么实际上没有错误?a.cpp#includeusingnamespacestd;templatestructA{structB{};};templatestructC{typedefA>D;intf(){typenameD::Bp;return0;}};Cgc;intx=gc.f();templatestructA>{structB{B(){cout输出B::B()B::~B()和a2.cpp#inc

c++ - 具有已知矩阵的模板矩阵表达式

这是一个思维练习,不是一个特定的问题,但我想听听你的意见。假设我有一些使用模板(Eigen、ublas等)的矩阵表达式DSL。现在假设我有一些常量矩阵,例如:Matrix2sigma1={{0,1},{1,0}};Matrix2sigma2={{0,i},{-i,0}};...etc...我对那些涉及运行时值的矩阵进行了一些操作:a*sigma1+b*sigma2;//a,bruntime您有什么想法来实现常量矩阵,以便编译器可以最大程度地优化表达式?特别是,如何将(i,j)运算符解析为常量? 最佳答案 根据我对问题空间的理解:给定