草庐IT

dynamic-linker-tricks-using-ld_pr

全部标签

c++ - dynamic_cast 失败 - 取决于操作系统版本

我有一个失败的动态转换。类布局是这样的:classA1{public:virtualintfoo1()=0;};classA2{public:virtualintfoo2();};classA3{public:virtualintfoo3();};classB:publicA1,publicA2,publicA3{intbar();};现在我使用指针(因此不会发生切片)进行向下转换。main(){Bb;A1*a1=dynamic_cast(&b);//okB*b1=dynamic_cast(a1);//okA2*a2_1=dynamic_cast(a1);//OSX10.7ok,OSX

c++ -/usr/bin/ld : cannot find -lGL

我已经安装了qt,当我在qt上运行应用程序时出现此错误。/usr/bin/ld:cannotfind-lGLcollect2:error:ldreturned1exitstatusmake:***[test3]Error114:05:48:Theprocess"/usr/bin/make"exitedwithcode2.我认为这个错误与OpenGL有关。我已经运行了所有这些命令,但没有任何反应sudoapt-getinstalllibgl1-mesa-devsudoapt-getinstalllibgl1-mesa-glxlibgl1-mesa-dev我的pro文件是:#-------

c++ - 为什么 ld 链接器允许使用相同的方法定义多个类?

考虑这个文件,first.cpp,包含一个类定义和使用:#includestructFoo{Foo(){std::cout和另一个second.cpp,包含一个冲突的类定义:#includestructFoo{Foo();~Foo();};Foo::~Foo(){std::cout当定义了两个具有相同名称的函数时,链接器会提示重复符号,但这些具有重复类方法的文件编译时没有错误。我用这些命令编译:$g++-csecond.cpp-osecond$g++secondfirst.cpp-ofirst对第二个g++调用的参数重新排序不会更改输出。当first运行时,这是输出:$./firstF

c++ - 使用 "using declaration"扩展非类型模板参数包(模板可变参数编译时 SignalSlot 实现)

对更好的标题有什么建议吗?在Qt中,信号和槽有一个很好的特性。但是,它会告诉您特定信号是否只能在运行时(afc)期间连接到特定插槽。打算:从模板创建一个包含“信号签名”(作为模板参数的函数指针)的类,以允许将给定签名(传递参数的数量和类型)的“插槽”仅连接到具有相似签名的“已定义”信号;必须简单易用。现在的问题:我在ISignalSlotMap类中遇到“使用声明”的编译错误。templatemultiplevariadicinheritancewithvariadicargumenttypes-在这里它编译得很好。还有,有什么办法可以简化模板算法吗?更新:第一个block可以在没有dl

一文弄懂using关键字的使用方法

"using"不仅仅是命名空间的简化工具,它在C++的世界中有着更广泛的应用。让我们一起揭开这个神秘的面纱,深入了解"using"在C++中的使用场景、方法以及如何巧妙运用它来提高代码的可读性和灵活性。1.命名空间(Namespace)的简化"using"关键字最为人熟知的用途之一就是简化命名空间的使用。在C++中,命名空间是一种组织和隔离代码的方式,而"using"关键字能够让我们更轻松地使用其中的内容。使用场景:当一个项目中有多个命名空间,而我们在某个文件中需要频繁使用其中的内容时,"using"就显得尤为方便。#include//未使用"using"的情况intmain(){std::c

c++ - C/C++ : Add -I option automatically for indirect include using automake

我有两个项目正在使用Automake构建。以下是Automake.amS的简化版本:AM_CPPFLAGS=-I/some/include_pathlib_LTLIBRARIES=libfoo.lalibfoo_la_SOURCES=foo.cpplibegfconfig_la_LIBADD=-lxml2和AM_CPPFLAGS=-I/some/include_path#Iwantthistohappenimplicitlylib_LTLIBRARIES=libbar.lalibbar_la_SOURCES=bar.cpplibbar_la_LIBADD=$(top_builddir)

c++ - boost::dynamic_bitset 连接性能

我想以一种不会降低性能的方式连接一个大的位集和一个较小的位集。目前,我的应用程序仅在以下代码中就花费了20%的CPU时间:boost::dynamic_bitsetencode(conststd::vector&data){boost::dynamic_bitsetresult;std::for_each(data.begin(),data.end(),[&](unsignedcharsymbol){for(size_tn=0;n我读过这个post它提出了一个解决方案,不幸的是,它对我不起作用,因为目标位集和源位集的大小差异非常大。有什么想法吗?如果使用boost::dynamic_b

c++ - 振奋 spirit : What type names should be used for the built in terminals?

我正在重构一个类型系统(类型模型),它使用spirit进行字符串序列化。我正在使用类型特征的编译时建模构造。templatetype_traits{typedefboost::spirit::qi::int_parserstring_parser;}templatetype_traits{typedefboost::spirit::ascii::stringstring_parser;}在这个例子中,我展示了原始解析器,但我希望也加入规则。int4类型有效,但这是因为(home/qi/numeric/int.hpp+27):namespacetag{templatestructint_

c++ - dynamic的动态数组(array of struct)

我有一个名为person的结构,如下所示:structperson{intheight,weight;};我还创建了一个person数组,如下所示:structArrayofperson{intlen;//indicatesthelengthofthisarray(itssupposedtobedynamic)person*p;//thisissupposedtobethedynamicarrayofperson.};我对person的数组执行此操作,如下所示:structArray_2d_ofperson{intlen;//indicatesthelengthofthisarray(

c++ - 为什么 dynamic_cast 存在?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Regularcastvs.static_castvs.dynamic_cast我通过这个问题了解了static_cast的工作原理。Whyisitimportanttousestatic_castinsteadofreinterpret_casthere?但如果static_cast确实知道类的继承关系,为什么dynamic_cast存在?我们什么时候必须使用dynamic_cast?