草庐IT

c++ - nullptr 作为模板参数

我有一个像这样的模板:templatevoidfunc(A*a,B*b){...}在某些情况下,不需要参数B*b,因此,我尝试使用nullptr:MyAa;func(&a,nullptr);编译器不喜欢这样,因为nullptr不知何故不是一种类型。我该如何处理这种情况?唯一的想法是在这种情况下只使用虚拟类型。 最佳答案 问题是nullptr实际上不是一个指针,而是一个nullptr_t类型的对象。所以它不能匹配A*或B*。一种选择是提供重载以专门处理nullptr_t。templatevoidfunc(A*a,nullptr_t){

c++ - 是否可以使用模板元编程有条件地禁用全局函数定义?

假设我有一个简单的无效模板函数,它以单个参数为模板,有两个特化,一个用于unsignedlong,一个代表size_t(内容不重要):templateTf(void);templateunsignedlongf(void){return1;}templatesize_tf(void){return2;}我的理解是类型的确切定义size_t是平台相关的,所以它可能等于也可能不等于unsignedlong.在我当前的平台上(Cygwing++5.2.0onWindows1064-bitcompilingwith-std=gnu++1y)这两种类型似乎是等价的,所以上面的代码无法编译:../

c++ - 如何初始化模板大小的数组?

我想初始化一个没有默认构造函数的模板大小的对象数组,如以下代码所示:#includetemplateclassFoo{public:classBar{Foo&_super;public:Bar(Foo*super):_super(*super){}};std::array_array;Foo(void):_array{{}}//Weneed{this,...}Ntimes{}};intmain(void){Foofoo;(void)foo;return0;}这是一种表达方式吗:“我想要一个包含N个对象的数组,所有对象都使用相同的参数进行初始化”?我认为模板元编程有一种方法,但我不知道该

C++构造函数模板特化

我正在尝试为std::string参数创建一个专门的构造函数,但当我使用字符串参数调用它时,总是会使用另一个构造函数。structLiteral:Expression{templateLiteral(Vval){value=val;}};templateLiteral::Literal(std::stringconst&val){value=val.c_str();}两者是在类内定义还是在类外定义都没有关系,或者像发布的示例一样,只有特化是在类外定义的:当使用std::string调用时,赋值value=val给出编译器错误。我如何为std::string正确特化此构造函数模板?

java - 在 C++ 中的模板参数上调用静态函数

以下Java代码在代表Printer的派生类的泛型参数T上调用静态方法printText(text)。是否有可能在C++中实现完全相同的行为?如果是,如何?publicclassPrinter{publicstaticvoidprintText(Stringtext){System.out.println(text);}publicstaticvoidprint(Stringtext){T.printText(text);}publicstaticvoidmain(String[]args){Printer.print("HelloWorld!");}} 最

c++ - STL 模板容器的 GDB 中的 "Cannot evaluate function -- may be in-lined"错误

我希望能够使用GDB从STL容器中获取地址并打印一对。例如,给定以下玩具程序:#includeintmain(){std::mapamap;amap.insert(std::make_pair(1,2));}我编译为:g++-ggdb3-O0-std=c++11-Wall-Wextra-pedantic-omain.outmain.cpp然后,当我尝试检查map的单个元素时,例如:pamap.begin()我得到:"Cannotevaluatefunction--maybein-lined"为什么会发生这种情况,我该如何解决?在Ubuntu20.04、GCC9.3.0、2.34中测试。

指针的 C++ 模板特化?

我读了《C++Templates-theCompleteGuide》一书,学习了指针的模板特化。(可能是我对这部分书的理解有误)(1)这是我的简单模板:#includetemplatevoidFunction(constT&a){std::cout:"voidFunction(constT*a){std::cout:"我使用的是ubuntu16.04x64,g++5.3,编译器报告:$g++main.cpp-omain.exemain.cpp:10:29:error:non-typepartialspecialization‘Function’isnotallowedvoidFunct

c++ - 嵌套类 C++ 的正确模板

我想不出为嵌套类编写正确模板的正确语法。我想做这样的事情templateclasslist{private:classnode{public:Tvalue;node();~node();};public:node*H;list();~list();};我想要一个类来表示外部类的每个元素,所以我想要将内部类隐藏在外部类中。这可能吗?或者我应该使用不同的方法? 最佳答案 你不需要为内部类指定模板参数(因为它没有声明为模板类):templateclasslist{private:classnode{public:Tvalue;node()

c++ - 如何定义依赖于模板参数的 typedef 的 typedef

我想制作一个typedef,它依赖于模板参数中typedef的存在:structfoo{usingMyType=int;};templatestructbar{//Pseudocode#ifT::MyTypeisdefinedusingMyType=T::MyType;#elseusingMyType=double;#endif};有没有办法让它在C++14中使用std::conditional或其他东西工作? 最佳答案 有一点sfinae。templatestructtype_or_default{usingtype=Fallba

c++ - 使用引用推导模板包中的冲突类型

我正在开发一个具有以下结构的程序:#include#includevoidfun(conststd::string&text,inta,intb){//(1)std::coutvoidexecute(void(*fun)(Args...),Args...args){fun(args...);}voidinit(conststd::string&text,inta,intb){execute(fun,text,a,b);}intmain(){init("Fun:",1,2);return0;}我收到了错误信息.code.tio.cpp:14:2:error:nomatchingfunct