草庐IT

javascript - Cast vs ToXXX for v8 中的值句柄

我将V8作为辅助语言嵌入到C++程序中。我检索到Handle来自V8,当我调用类似的东西时Handlevalue_handle=context->Global()->Get(key_handle);然后我可以发现它是(比方说)一个带有value_handle->IsString()的字符串.如果是这样,我可以将其转换为Handle访问其特定于字符串的方法。但似乎有两种方法可以做到这一点:Handlestring=value_handle->ToString();或Handlestring=Handle::Cast(value_handle);但是,对于数组和函数,没有toArray()

c++ - 为什么 std::ofstream 在没有 std::ios_base::trunc 的情况下截断?

这个问题在这里已经有了答案:Doesstd::ofstreamtruncateorappendbydefault?(1个回答)关闭2年前。根据此C++引用:http://www.cplusplus.com/reference/fstream/ofstream/ofstream/,std::ofstream的默认打开模式是ios_base::out并且它没有提到隐含的其他模式。因此,我希望如果我用一个小文件覆盖一个大文件,大文件的“超出”部分应该保持不变,只有文件的第一部分应该被新的、更短的数据替换。另一方面,ApacheC++标准库用户指南(http://stdcxx.apache.o

c++ - 使用 Clang 构建 V8 并发出 LLVM IR

我正在尝试使用Clang构建V8Javascript引擎并输出.ll文件。我正在尝试合并信息here和here去做这个。但是,当我尝试make时,它失败了,显示“Noruletomaketarget”。我搞不清楚了。我试过只编译v8.cc,但完全失败了。我想这是因为我试图通过将它作为编译器放入来强制-emit-llvm,但我不确定。$cdv8$exportCXX="clang++-S-emit-llvm"$exportCC="clang-S-emit-llvm"$exportCPP="clang-E-S-emit-llvm"$exportLINK="clang++-S-emit-llv

c++ - V8 FunctionTemplate 类实例

我有以下类(class):classPluginManager{public:HandleRegister(constArguments&args);HandleGetObjectTemplate();};我希望可以从JavaScript访问Register方法。我像这样将它添加到全局对象中:PluginManagerpluginManagerInstance;global->Set(String::New("register"),FunctionTemplate::New(pluginManagerInstance.Register));它抛出以下错误:'PluginManager:

c++ - 如何填充 v8 数组?

我有一个vectorstd::vectorpath我想将它复制到v8array并从我的函数中返回它。我试过创建一个新数组v8::Handleresult;并把值从path进入result但没有运气。我还尝试了的几种变体returnscope.Close(v8::Array::New(/*I'vetriedmanythingsinhere*/));没有成功。This是一个类似的问题,但我似乎无法复制结果。如何填充v8数组? 最佳答案 这个例子直接来自Embedder'sGuide似乎非常接近您想要的-用新的String对象替换新的In

c++ - 实现观察者模式时出现问题 : "Member reference base type ________ is not a structure or union"

我一直在实现准系统观察者模式,但遇到了一个有点神秘的错误:“成员引用基类型‘Observer*’不是结构或union”。我认为这与我对模板的使用有关,我对模板的使用仍然相当不舒服。这是有问题的代码(为了简化事情而删除了大多数缺点/析构函数):主题界面:classSubject{public:virtualvoidnotify();private:listm_observers;};主题实现:voidSubject::notify(){list::iteratori;for(i=m_observers.begin();i!=m_observers.end();i++){*i->updat

c++ - GCC 中的 "empty base optimization"是否可配置?

考虑这些类型:structA{};structB:A{inti;};sizeof(A)>0按照标准要求。由于空基优化,sizeof(B)应为4。然而在GCC4.1.1上它是5(我在这个区域使用一包1)。并且不一致-我的一些文件得到了它,有些没有。还不能确定有什么区别,我们有一个很大的项目。在我使用的其他三个编译器(Microsoft和Freescale)上,我没有这个问题。根据thisarticle,空基优化显然是可选的.在GCC4.1.1中是否有编译器选项或pragma来调整它?我可以解决这个问题,但我想先了解发生了什么。我用Google搜索了一段时间,似乎找不到任何东西。

c++ - 警告 : overloaded virtual function "Base::process" is only partially overridden in class "derived"

我低于警告。我的部分代码是:classBase{public:virtualvoidprocess(intx){;};virtualvoidprocess(inta,floatb){;};protected:intpd;floatpb;};classderived:publicBase{public:voidprocess(inta,floatb);}voidderived::process(inta,floatb){pd=a;pb=b;....}我低于警告:Warning:overloadedvirtualfunction"Base::process"isonlypartiallyo

c++ - std::shared_ptr::owner_before 和 std::owner_less: "owner-based order"到底是什么意思?

我发现了一些关于此的讨论,但似乎没有任何内容明确说明“基于所有者的订单”到底是什么。它是否有效评估关于拥有的指针内存地址的值? 最佳答案 它定义了一个任意严格的弱排序,在该排序下,两个指针当且仅当它们共享所有权或均为空时才等效。等价以通常的方式定义:boolequivalent(p1,p2){return!p1.owner_before(p2)&&!p2.owner_before(p1);}这并不一定意味着它们指向同一个对象。两个指针可以指向不同的对象但仍然共享所有权:structthing{intn;};shared_ptrt1=

c++ - 参数包感知 std::is_base_of()

是否有可能静态断言作为模板参数提供的类型是否实现了参数包中列出的所有类型,即。参数包感知std::is_base_of()?templateclassCommonBase{static_assert(is_base_of::value,"Invalid.");^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^parameterpackawareversionofstd::is_base_of()public:templateT*as(){static_assert(std::is_base_of::value,"Invalid.");returnreinterpret