草庐IT

Metaprogramming

全部标签

c++ - 具有多个模板参数错误的模板部分特化

当我在一个带有一个模板参数的类上使用模板偏特化时,我可以像这样特化一个方法:#includetemplateclassTest{public:intfoo();};templateinlineintTest::foo(){return0;}templateinlineintTest::foo(){return1;}intmain(){TestwTest2;TestwTest1;wTest2.foo();wTest1.foo();return0;}方法foo专用于Dim=1。但是一旦我向我的类添加模板参数,就像这样:#includetemplateclassTest{public:int

c++ - 用于位计数的元程序

我需要C++中的位计数器实用程序,它能够计算数字常量值中最高有效位的数量,并将该数字显示为编译时常量。只是为了让一切都清楚-一组数值的最高有效位的数量:255=>8(11111111b)7=>3(111b)1024=>11(10000000000b)26=>5(11010b)我是模板编程的新手,但我认为就是这样。请提供一些代码示例,我们将不胜感激。 最佳答案 编辑:我完全误读了你想要的内容。这是你想要的:0的有效位数为0。x中的有效位数是x/2中的有效位数加1。所以你得到:templatestructSignificantBits{

c++ - 不能在函数声明中使用模板参数

我正在努力寻找以下代码无法编译的充分理由。它给了我以下错误。Error2errorC2923:'std::pair':'std::set::iterator'isnotavalidtemplatetypeargumentforparameter'_Ty1'我需要了解一下为什么C++不允许我在函数声明中使用模板参数,因为我使用set::iterator而不是set::iterator程序可以工作.#include#includeusingnamespacestd;templatevoidprint(constpair::iterator,bool>&p)//setOfInts;setOf

java - java作为安全语言的解释?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有人可以帮助我理解以下攻击是什么以及java如何使这些攻击不可能:overrunningtheroutinestack-acommonattackofwormsandvirusescorruptingmemoryoutsideitsownprocessspacereadingorwritingfileswithoutpermission.我精通c/c++

c++ - 在 C++11 中将 std::function/mem_fn 与成员函数一起使用

长话短说,是否有一种简单/定义的方式来以流线型方式处理函数对象/lambda和成员函数?如果我理解正确,如果我使用std::mem_fn,我需要将正确类型的对象传递给函数调用,即Objecto;ftncallstd::mem_fun(&Object::function);ftncall(o);理想情况下,会有一些方法可以将o“附加”到该函数对象,也许作为std::weak_ptr,这样我们就知道o是否被删除了。例如,如果有一种方法可以像这样模糊地做一些事情:Objecto;ftncallstd::mem_fn(&Object::function,o);//Ormaybestd::mem

c++ - C++ 预处理器元编程图灵完备吗?

我知道C++模板元编程是图灵完备的。同样的事情也适用于预处理器元编程吗? 最佳答案 嗯,宏不会直接递归展开,但我们有办法解决这个问题。在预处理器中进行递归的最简单方法是使用延迟表达式。延迟表达式是需要更多扫描才能完全展开的表达式:#defineEMPTY()#defineDEFER(id)idEMPTY()#defineOBSTRUCT(...)__VA_ARGS__DEFER(EMPTY)()#defineEXPAND(...)__VA_ARGS__#defineA()123A()//Expandsto123DEFER(A)()/

c++ - 调试元程序

有什么方法可以一步步检查模板中发生的事情吗?我的意思是它是如何一步步实例化的等等?我在书中提到了here,我(2分钟前)发现了一个非常有趣的示例,说明如何将二进制文件实现为元函数。templatestructbinary{staticunsignedconstvalue=binary::value//specializationstructbinary//terminatesrecursion{staticunsignedconstvalue=0;};而且我认为能够逐步查看在该模板的实例化过程中完成的工作可能会非常有用。感谢您的回复。 最佳答案

c++ - 使用元编程进行自动 + 静态类内常量初始化

考虑以下实现Angle的简化模板元编程代码内部存储模360度减少值的类。#include#includetemplatestructModulus{staticautoconstvalue=N%D;};templatestructAngle{staticautoconstvalue=Modulus::value;//ERROR//staticintconstvalue=Modulus::value;//OK//staticautoconstvalue=N%360;//OKtypedefAngletype;};intmain(){std::cout::type).name()::type

c++ - 元编程中有哪些数学运算符可用

在ToddVeldhuizen的metaprogrammingguide中看到最后一个例子给我留下了深刻的印象其中像sin和cos这样的三角函数是在编译时预先计算的。老实说,这让我大吃一惊,如果您像我一样正在编写循环执行大量此类操作的代码,那么这可能会对提高性能产生重大影响。问题1然而,这让我想知道作为运行时工具(调用实际数学库函数,如sin或cos)之间的界限在哪里以及仅作为编译时数学运算符可用的内容。Todd的示例需要使用普通算术手动计算三角函数。那么我是否假设编译器能够处理所有普通的数学函数*+-/但没有别的吗?问题2在这种情况下,您只能获得整数的sin和cos计算的编译时结果,

c++ - 使用 MPL 列表扩展 boost 变体

我正在尝试为程序提供一种向库中的变体添加新对象的方法,但我遇到了一些神秘的错误。#include#include#include#includestructInternalType1{};structInternalType2{};templatestructFoo{typedefboost::mpl::listTypes;typenameboost::make_variant_over::type>::typecontainer_;//typenameboost::make_variant_over//>::type//>::typecontainer_;};structLocalT