草庐IT

default_parallel

全部标签

c++ - 如何在 C++ 中创建一个 "default"流插入运算符?

我有一个类似于boost::any的类,因为它是一个模板化的容器类。我想要一种将包含的值写入字符串的方法。但是,如果包含的类型不提供流插入运算符,我希望我的方法返回一些默认字符串而不是编译失败。下面是我最接近的,应该清楚我要做什么:namespaceW{namespacehide{templatestd::ostream&operatorstructC{Tt_;std::stringToString()const{usingnamespacehide;std::ostringstreamoss;oss这很好用,但有一些注意事项。例如,如果我想为一个类实际提供一个重载的插入运算符,那么该

c++ - 移动构造函数和赋值运算符 : why no default for derived classes?

为什么没有为派生类创建默认移动构造函数或赋值运算符?证明我的意思;具有此设置代码:#includestructA{A(){}A(A&&){throw0;}A&operator=(A&&){throw0;}};structB:A{};以下任一行抛出:Ax(std::move(A());Ax;x=A();但以下都没有:Bx(std::move(B());Bx;x=B();以防万一,我使用GCC4.4进行了测试。编辑:后来使用GCC4.5进行的测试显示了相同的行为。 最佳答案 通读0xFCD中的12.8(12.8/17特别是移动构造函数)

c++ - "vtable"链接器错误(涉及带有 "=default"的虚拟析构函数)- Clang 3.1 中的潜在错误?

我的代码中出现链接器错误。我已将其精确定位为以下最基本的要点。这段代码给出了链接器错误"vtableforFoo",referencedfrom:Foo::Foo()classFoo{public:Foo();virtual~Foo()=default;};Foo::Foo(){}但是这段代码没有给出任何错误:classFoo{public:Foo();virtual~Foo(){}};Foo::Foo(){}为什么?我认为=default基本上应该和那些空方括号做同样的事情。更新:我正在使用“AppleLLVM编译器4.1”,它是Xcode4.5.2的一部分。这可能是这个编译器中的错

c++ - 模板函数 : default construction without copy-constructing in C++

考虑structC{C(){printf("C::C()\n");}C(int){printf("C::C(int)\n");}C(constC&){printf("copy-constructed\n");}};还有一个模板函数templatevoidfoo(){//default-constructatemporaryvariableoftypeT//thisiswhatthequestionisabout.Tt1;//willbeuninitializedfore.g.int,float,...Tt2=T();//willcalldefaultconstructor,thenco

c++ - 是否有可能在其工作后将线程连接到 'parallel for' 区域?

一开始我有两个作业需要同时运行:1)可以并行化的for循环2)一个线程就可以完成的功能现在,让我描述一下我想做什么。如果存在8个可用线程,job(1)和job(2)必须首先同时运行,分别有7个线程和1个线程。作业(2)完成后,作业(2)使用的线程应分配给并行for循环的作业(1)。我正在使用omp_get_thread_num计算每个区域中有多少线程处于事件状态。我希望job(1)中的线程数在job(2)完成时增加1。下面描述了一个可能错误或正确的解决方案:omp_set_nested(1);#pragmaompparallel{#pragmaompsections{#pragmaom

c++ - OpenMP "master"编译指示不得包含在 "parallel for"编译指示中

为什么英特尔编译器不允许我指定openmpparallelforblock中的某些操作应该仅由主线程执行?如果没有这种功能,我该如何实现我想要实现的目标?我想做的是通过并行回调来更新进度条:longnum_items_computed=0;#pragmaompparallelforschedule(guided)for(...arangeofitems...){//updateitemcount#pragmaompatomicnum_items_computed++;//updateprogressbarwithnumberofitemscomputed//masterthreadon

c++ - 将代码从 C++03 迁移到 C++11 : should I be cautious about the implicit default move constructor?

我有一个代码库,我想从C++03切换到C++11。据我所知,某些类将通过具有隐式默认移动构造函数(以及随之而来的移动赋值运算符)而从更改中受益。虽然我完全同意(我什至认为这是一件好事),但我有点担心这种隐式构造函数可能对我拥有的某些不可复制类产生的影响。我举的一个例子是一个类,它包装了libiconv的iconv_t句柄以利用RAII。更明确地说,类如下:classiconv_wrapper{public:iconv_wrapper():m_iconv(iconv_open()){}~iconv_wrapper(){iconv_close(m_iconv);}private://Not

c++ - 如何在模板元编程中使用 'default' 值

我面临以下问题:我有一些通用容器,能够对类型执行一些操作。为简单起见,这些操作在需要时是线程安全的。并且,请求意味着容器中的类型具有typedefstd::true_typeneeds_thread_safety;。structthread_safe_item{typedefstd::true_typeneeds_thread_safety;/**/};structthread_unsafe_item{typedefstd::false_typeneeds_thread_safety;/**/};templatecontainer{/*somealgorithms,thatarestd

c++ - 谷歌模拟 : "no appropriate default constructor available"?

将VisualStudio2010C++与googlemock结合使用。我正在尝试使用我创建的模拟,但在线上遇到编译器错误:EmployeeFakeemployeeStub;错误是:1>c:\someclasstests.cpp(22):errorC2512:'MyNamespace::EmployeeFake':noappropriatedefaultconstructoravailable假员工:classEmployeeFake:publicEmployee{public:MOCK_CONST_METHOD0(GetSalary,double());}员工:classEmploy

c++ - 何时使用 =default 与 =delete

据我了解,这些语义仅用于复制构造函数、移动构造函数、复制赋值、移动赋值和析构函数。使用=delete用于禁止使用其中一项功能,即=default如果您想向编译器明确说明在何处使用这些函数的默认值,则使用它。在制作类(class)时使用这些关键字的最佳做法是什么?或者更确切地说,在开发类(class)时我如何记住这些?例如,如果我不知道我是否会使用这些功能之一,最好用delete禁止它。或允许并使用default? 最佳答案 好问题。同样重要的是:哪里使用=default和=delete.我对此有一些有争议的建议。它与我们所有人(包括