草庐IT

c++ - 专门化模板别名的最佳方法(或解决方法)

我目前正在实现一个基于元编程的微型编译时计算库。如果为运算符定义了一个基类,它有一个结果类型定义(我决定使用像std::integral_constant这样的整数包装器作为值而不是原始整数值,以提供一个统一的接口(interface)沿库)和一个n元运算符基类,它检查运算符是否至少有一个操作数:templatestructoperator{usingresult=RESULT;};templatestructnary_operator:publicoperator{static_assert(sizeof...OPERANDS>0,"Anoperatormusttakeatleast

c# - 帮助专门从 C# 背景学习 C++ 的指南

如果您有丰富的C#经验,是否有任何人会建议特别学习C++的指南/引用?有C++指南,但很多都是从绝对基础开始的,我觉得我已经学习了很多C#知识。但是绝对的基础知识可能是一件好事,我可能会树错了-我想有些人可能会说“你应该考虑完全不同的东西并单独学习它,否则你会错过一些东西”我实际上曾经在C++方面“还算不错”,但现在一切都消失了...... 最佳答案 有关C#到C++(Win32)项目端口的有用信息。可能是一个很好的起点。http://blogs.cozi.com/tech/2008/03/index.html

c++ - 使用 `void` 专门化模板的规则是什么?

这是我刚才在野外写的内容的精简说明。我真的没想到它会起作用,但它确实起作用了。#includetemplateusingFoo=std::array;constintFOO_SIZE=std::tuple_size>::value;我不确定使用void来专门化Foo是否可以编译,但至少在这种情况下可以编译。我不确定这个解决方案是可移植的,或者它是否只是侥幸,因为std::array的实现碰巧与概念兼容空数组,对我来说这听起来像是胡说八道。我什么时候可以,什么时候不能,使用void来特化一个模板? 最佳答案 如果不复制标准的一半(:D

C++ 模板 - 使用 "std::is_same_v"而不是专门化并避免编译错误?

我是模板的新手,我正在尝试使用它们以避免重复非常相似的功能。在下面的例子中,我做了一个简单的小例子来展示我的问题。特别是,我有两个struct(“solo”和“duo”)。这些结构有一个共同的成员(a),其中一个有一个特定的成员(b)。然后我有一个模板函数,它可以采用任一结构并打印成员a...我希望它能够仅在结构类型为“duo”时打印成员b。我的做法(使用std::is_same_v)无法编译。我读到可以使用专门化来这样做,但是我想知道是否有更优雅的方法?因为那时我有失去模板优势的感觉……但可能我还没有得到模板的力量以及如何/为什么使用它们。非常感谢您的帮助!#include#incl

c++ - 具有专门构造函数的模板类

考虑以下模板化数组定义的人为示例:templateclassTBase{protected:tm_Data[n];//...};templateclassTDerived:publicTBase{TDerived(){}};我可以特化这种类型来为长度为2的数组提供非默认构造函数,如下所示:templateclassTDerived:publicTBase{public:TDerived(constt&x0,constt&x1){m_Data[0]=x0;m_Data[1]=x1;}};intmain(){TDerivedArray2D_A(2.0f,3.0f);//usesspecia

c++ - 一个类怎么可能从专门针对自身的模板派生出来呢?

我真的不知道如何描述这个,但这是代码:classA:publicstd::vector{};//....Aa;a.push_back(a);它有什么作用,你为什么要这样做? 最佳答案 这是curiouslyrecurringtemplatepattern(CRTP).它允许您实现静态多态性。但是,将std::vector用作基类是一种不好的做法,因为它没有虚析构函数。 关于c++-一个类怎么可能从专门针对自身的模板派生出来呢?,我们在StackOverflow上找到一个类似的问题:

c++ - 无法完全专门化字符串文字的模板

我正在创建自己的lexical_cast包装Boost的函数,具有bool的特殊行为类型,并避免Boost的词法转换函数的异常版本。我完全专注于bool的功能这样我就可以将iostreams用于std::boolalpha机械手。但是,我无法让它适用于字符串文字。完整的代码以及指向实时示例的链接如下:templateT1lexical_cast(T2const&value,T1const&defaultValue=T1{}){std::coutboollexical_cast(charconst*const&value,boolconst&defaultValue){std::cout

c++ - 基于类模板参数专门化 C++ 成员函数

我有一个带有模板参数的类,它应该决定它包含两种数据样式中的哪一种。基于该参数,我想用两种不同的方式之一实现一个成员函数。我尝试使用BoostEnable-If,但没有成功。这是我最惊讶的代码版本不起作用:#includeenumPadSide{Left,Right};templatestructdummy{dummy(int){}};templatestructString{typenameboost::enable_if_c::typegetRange(dummy=0){}typenameboost::enable_if_c::typegetRange(dummy=0){}};int

c++ - 使用默认参数专门化内部模板

当内部模板的参数都已知时,我在专门化内部模板时遇到了麻烦。这是一个例子:templatestructouter{templatestructinner{typedefT1type;};};templatetemplatestructouter::inner{typedefinttype;};这很好用。如果我改为像这样指定内部模板,它不会:templatetemplatestructouter::inner{typedefinttype;};为此,我收到错误消息,“在‘>’标记之前无效的显式特化...封闭类模板未明确特化...模板参数未在部分特化中使用:...T0”。不确定WTAF是否在

c++ - 如何专门化模板子类?

我试图在另一个类中特化一个模板类,但编译器不允许。该代码在类Foo之外工作,但在类内部不工作,我希望structBla对类Foo私有(private)。classFoo{templatestructBla;templatestructBla{staticconstexprintx=1;};};error:explicitspecializationinnon-namespacescope'classFoo' 最佳答案 你根本做不到。该错误很好地总结了它。类模板只能专门用于命名空间范围。classFoo不是命名空间。您可以根据标准[t