草庐IT

c++ - 需要处理 C++ 类成员的静态函数

我必须在两个软件之间建立某种桥梁,但我面临着一个我不知道如何处理的问题。希望有人会提出有趣且(最好)可行的建议。这是背景:我有一个C++软件套件。我必须用另一个函数替换给定类中的某些函数,这没关系。问题是新函数调用了另一个必须是静态的函数,但必须处理类的成员。这是让我发疯的第二个功能。如果函数不是静态的,我会得到以下错误:error:argumentoftype‘void(MyClass::)(…)’doesnotmatch‘void(*)(…)’如果我将其设置为静态,则会出现以下错误:error:cannotcallmemberfunction‘voidMyClass::MyFunc

c++ - 模板类的静态常量成员

我有一个带有静态常量成员的模板类:templateclassA{public:A(Tval):t(val){}staticconstintVALUE=5;Tt;};假设在我的代码中的某处,我使用int、char和long类型对其进行了实例化。现在我想访问VALUE:intmain(){inti1=A::VALUE;inti2=A::VALUE;inti3=A::VALUE;return0;}上述所有访问同一事物的方式不都是相同的吗?这种情况下,别人是不是随便选一个类型?有什么办法可以避免指定类型? 最佳答案 这些都是数字常量,共享相

python - C++ 中的递归生成器

我有一个大小为N的vector,其中每个元素i的值可以从0到possible_values[i]-1。我想做一个函数来遍历所有这些值。我能够使用递归生成器在Python中做到这一点:defall_values(size,values,pos=0):ifpos==size:yield[]else:forvinxrange(values[pos]):forv2inall_values(size,values,pos+1):v2.insert(0,v)yieldv2possible_values=[3,2,2]forvinall_values(3,possible_values):print

c++ - SFINAE 用于检测非成员模板函数的存在

TL;DR我想写一个模板函数Process(Tvalue)根据非成员函数的存在,对于不同的值表现不同CreateProcessor().我能为此做什么?我对SFINAE有疑问。假设我们需要支持函数CreateProcessor返回接口(interface)IProcessor的实现对于某些类型T.在C++中,我们不能为一个函数创建多个仅在返回类型上不同的重载,因此我们必须创建函数CreateProcessor也是由T参数化的模板函数.现在假设我们要写一个模板函数Process(Tvalue)根据CreateProcessor()的存在而不同,即它应该处理value在情况下使用处理器Cr

c++ - std::move 与 std::forward

这似乎是已经提出的最相关的问题。Whatsthedifferencebetweenstd::moveandstd::forward但是每个答案都是不同的,适用的和说的东西也略有不同。所以我很困惑。我有以下情况。将项目复制到容器中Copy项是C++03,所以我非常理解。将项目构建到容器中Constructitemintocontainer我相信使用完美转发正确地通过两个函数将参数转发到emplaceBackInternal()中T的构造函数(如果我错了请指出)。将元素移入容器我的问题似乎是理解如何将元素移入容器。代码:templateclassContainer{std::size_tl

c++ - boost 梅森扭曲器 : how to seed with more than one value?

我正在使用boostmt19937实现进行模拟。模拟需要可重现,这意味着存储RNG种子并可能在以后重复使用。我正在使用windowscryptoapi生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个注释,包括RNG种子-所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上不同,我需要使用不同的种子——所以种子需要足够长以避免意外碰撞。我已经确定64位的播种应该足够了;在大约2^32次运行后发生碰撞的可能性将达到50%——这个概率足够低,以至于由它引起的平均错误对我来说可以忽略不计。仅使用32位

c++ - 用作模板函数输入的函数的 void 返回值被视为参数

假设你有一些目标类,上面有一些方法:classSubject{public:voidvoidReturn(){std::cout还有一个值类(在概念上类似于Boost.Any):structValue{Value(){}Value(Valueconst&orig){}templateValue(Tconst&val){}};我想使用Subject类中的方法生成一个Value对象:Subjectsubject;Valueintval(subject.intReturn());ValuevoidVal(subject.voidReturn());//compilationerror我在VC

C++ GCC 为什么这段 sfinae 代码可以用 GCC 4.7 编译,但不能用 4.8 编译?

我喜欢在模板类中使用本地类来执行类似“staticif”的构造。但是我遇到了gcc4.8不想编译我的代码的问题。但是4.7可以。这个例子:#include#include#includeusingnamespacestd;structA{voidprintA(){coutstructTest{voidprint(){structIfA{constexprIfA(T&value):value(value){}T&value;voidprint(){value.printA();}};structIfB{constexprIfB(T&value):value(value){}T&value

c++ - 如何在获得 future 值(value)后重用 boost::promise 对象?

voidsss(boost::promise&res){res.set_value("hi");}voidyyy(boost::promise&res){res.set_value("hello");}intmain(){boost::threadth;boost::promisea;th=boost::thread(sss,boost::ref(a));th.join();std::cout我收到promise已经满足的错误。如何复用同一个Promise对象? 最佳答案 用未使用的promise替换它:a=boost::promi

转换为较小类型时 C++ 截断

我有一个64位longint,其中包含一些位域。我需要将存储在第二个和第三个字节中的16位带符号整数添加到一个32位值中。我正在使用这样的东西:u32Function(s32value,u64bitfield){returnvalue+(s16)(bitfield>>8)}在将位域扩展为32位有符号整数并执行加法之前,我能否依赖编译器将位域转换为16位有符号整数?如果不是,我还应该如何截断剩余字节并执行我需要的类型转换? 最佳答案 是的,需要注意的是您依赖于特定于编译器和体系结构的行为。当然,依赖这种行为会使您陷入真正难以诊断的“特