草庐IT

采用者

全部标签

c++ 函数在不使用模板的情况下采用任何数据类型?

我的作业要求一个人为任何数据类型编写一个函数。该函数应该打印结构的字节并确定数据结构使用的字节总数以及区分用于成员的字节和字节用于填充。我和大多数类(class)的第一react是使用模板。这允许您编写函数一次并收集传递给函数的对象的运行时类型。使用memset和typeid的可以很容易地完成所要求的。然而,我们的教授。刚刚看到我们关于模板和该死的模板的讨论。看到这个后,我陷入了一个循环,我正在寻找一些指导作为解决这个问题的最佳方法。我调查过的一些事情:通过显式转换取消指针(这看起来会变得困惑)仅具有虚函数的基类,所有数据结构都从中继承,这似乎有点奇怪。一个与我们的每个数据结构都有“友

c++ - 在 C++ 中使用 Doxygen 和 GraphViz 的错误调用/调用者图

所以我开始使用Doxygen1.8.13(Windows10,64位)记录一个C++项目,并遇到了GraphViz的调用/调用者图生成问题。如果使用以下代码生成文档,Doxygen将生成如下所示的调用图:但如代码所示,Path()不调用任何函数(空主体)。structPath{Path(constNode*source_node,constNode*target_node,constunsignedlongcost,conststd::vectorpath):source_node(source_node),target_node(target_node),cost(cost),pat

c++ - 当函数可能失败需要调用者重试时,有没有完美转发的设计模式?

我的问题是关于完美转发,先看例子,templatevoidfoo(A&&a,B&&b){Ainternal_a=std::forward(a);Binternal_b=std::forward(b);}到目前为止一切顺利。我可以这样调用它,Xx;Yy;//doalotofstuffonx,y//.....//.....//wewillusex,yinfoo(x,y)only,sowecanjustmovefoo(std::move(x),std::move(y));现在,说foo可能会失败。templateboolfoo(A&&a,B&&b){Ainternal_a=std::forw

c++ - std::string_view 在传递给另一个采用 std::string 的函数时的优点

我有以下辅助函数,它接受一个字符串View并在unordered_map中返回一个查找:intScanner::getOpCount(std::string_viewop){autoitr=Parser::opTable.find(op);}//inanotherfile:conststaticstd::unordered_mapopTable;这不会编译,因为find需要一个字符串参数,所以我找到的唯一解决方案(如果我错了请纠正我)是将op包装为字符串{操作}。然而,让我担心的是std::string_view是为了简化字符串传递,但是如果我必须从它构造一个字符串而不考虑函数体,那么

c++ - 我的代码能否使用 'T' 或 'const T &' 特化,以可用者为准?

我们正在与一个内部图书馆合作,其中有一个StringBuilder用于转换VariableValue列表的类对象变成一个字符串。VariableValue对象可以从任意类型构造(通过专门化convertVariable模板函数)。这是描述场景的代码:structVariableValue{//Constructa'VariableValue'object,avarianttypewhichcanrepresentvaluesof//oneoffourtypes:string,number(integer),booleanandfloatingpoint.explicitVariable

c++ - 模板类构造函数采用模板类的实例

我的情况如下:ClassBar{...}templateclassFoo{public:...Foo(Foobar){...}...}因此类Foo的构造函数之一可以采用由Bar参数化的类Foo的元素。这一切都很好,直到我实例化由Bar参数化的类Foo的某些东西,其中此构造函数被解释为复制构造函数,这不是我想要的。我想知道如何让构造函数在不干扰复制构造函数的情况下采用这样的元素。例如我可以这样做:templateclassFoo{public:...Foo(Foobar,intunused){...}...}而且它工作正常,因为现在构造函数不会与复制构造函数冲突。有没有标准的方法来处理这

c++ - 将调用者姓名传递到模板函数中的惯用方式

我有一个从多个其他函数调用的模板化函数,需要记录调用它的函数的名称。理想情况下,我想执行以下操作:templatevoidfoo(constT&arg){//...}但是,这当然不会编译,因为CALLER是一个无效的模板参数。当然,我可以简单地修改foo的签名,使其也接受一个字符串(调用者的姓名)来实现这一点。问题:是否有首选的C++惯用方法来实现此类事情? 最佳答案 不幸的是你can'tusestringliteralsastemplateargumentsBecausestringliteralsareobjectswithin

c++ - 构造函数采用参数时的GTest夹具?

我有一个简单的示例类。它有一个数据成员,它是一个指向Armadillo矩阵的指针的std::vector。构造函数将这样一个vector作为唯一的参数。这是文件TClass.cpp:#include#includeclassTClass{private:std::vectormats;public:TClass(std::vectorm_);arma::mat*GetM(intwhich){return(mats.at(which));};};TClass::TClass(std::vectorm_){mats=m_;}我想构造一个GTestfixture来测试成员函数GetM。这是我

c++ - 如何改进采用编译时已知条件的构造函数?

我有一个看起来像这样的构造函数:SomeType(constboolcondition=true){if(condition){//dosomeinit}else{//dosomeotherinit}}但由于condition在编译时已知,我怀疑这可以改进,避免在运行时传递变量并评估if语句。这是真的?怎么做到的? 最佳答案 C++中没有语法来调用像这样的简单模板化构造函数structSomeType{templateSomeType();};templateSomeType::SomeType(){//dosomeinit}tem

c++ - 在施工期间采用类成员的未初始化引用是否合法?

来自这个question,我更进一步:C*c=static_cast(malloc(sizeof(C)));如引用问题中所述,在调用构造函数之前访问*c(其成员)是未定义的行为。但是,指针本身当然是有效的。现在在构造函数中,成员已经可用,我应该可以取消地址了。综上所述,我得出以下结论是合法的:classY;classX{Y&y;public:X(Y&y):y(y){}//non-trivialconstructor!};classY{X&x;public:Y(X&x):x(x){}};classZ{Xx;Yy;public:Z():x(y),y(x){}};只要X的构造函数不使用对Y的