小编Mat*_*att的帖子

SFINAE:“enable_if 不能用于禁用此声明”

为什么我不能enable_if在以下上下文中使用?

我想检测我的模板化对象是否具有成员函数 notify_exit

template <typename Queue>
class MyQueue
{
   public:
    auto notify_exit() -> typename std::enable_if<
            has_member_function_notify_exit<Queue, void>::value,
            void
        >::type;

    Queue queue_a;
};
Run Code Online (Sandbox Code Playgroud)

初始化为:

MyQueue<std::queue<int>> queue_a;
Run Code Online (Sandbox Code Playgroud)

我不断收到(clang 6):

example.cpp:33:17: error: failed requirement 'has_member_function_notify_exit<queue<int, deque<int, allocator<int> > >, void>::value';
      'enable_if' cannot be used to disable this declaration
            has_member_function_notify_exit<Queue, void>::value,
Run Code Online (Sandbox Code Playgroud)

或(g++ 5.4):

In instantiation of 'class MyQueue<std::queue<int> >':
33:35:   required from here
22:14: error: no type named 'type' in 'struct std::enable_if<false, void>'
Run Code Online (Sandbox Code Playgroud)

我尝试了很多不同的东西,但不知道为什么我不能enable_if用来禁用这个功能。这不正是enable_if为了什么吗?

我在这里放了一个完整的例子 …

c++ sfinae c++11 clang++

11
推荐指数
2
解决办法
3734
查看次数

在C++中::*意味着什么?

是什么

 private:
    BOOL (LASreader::*read_simple)();
Run Code Online (Sandbox Code Playgroud)

意思?

它来自LAStools,位于lasreader.hpp

BOOL是一个typedef bool(来自mydefs.hpp),但我不知道这行是什么声明,特别是::*(双冒号星号),它看起来像一个函数调用.

c++

10
推荐指数
1
解决办法
3207
查看次数

PHP扩展中的SEG错误

我编写了一个PHP扩展来访问静态库中的函数,我将PHP构建为CGI,一切似乎都有效(经过几天的工作......)

一旦所有工作都兴奋,我重新编译PHP而没有调试我在其中的消息.(php_printf("here111");.... php_printf("sending arguments...");)

然后,它就停止了工作.我在静态库中调用的函数有效,我通过直接从另一个可执行文件调用它来测试它.

我使用调试符号(--enable-debug)构建了PHP,并且可以在gdb中将其调试到一定程度.

我仍然在努力弄清楚出了什么问题.似乎lib(diffFst)中的函数似乎无法读取输入参数.

268     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssssssd",
269        &filA, &filA_len,
270        &nomvarA, &nomvarA_len,
271        &filB, &filB_len,
272        &nomvarB, &nomvarB_len,
273        &filO, &filO_len,
274        &newnomvar, &newnomvar_len,
275        &mult
276        ) == FAILURE) {
277         RETURN_LONG(-100);
278     }
279 
280     php_printf("Read arguments:\nfilA: %s, nomvara: %s\nfilB: %s, nomvarB: %s\nfilO: %s, nomvarO: %s\nMult: %0.3f\n",
281        filA,nomvarA, filB,nomvarB, filO,newnomvar, mult);
282 
285     ier = difffst_(filA,nomvarA, filB,nomvarB, filO,newnomvar, mult);
Run Code Online (Sandbox Code Playgroud)

当我调用此函数时,该php_printf()语句将起作用并打印出正确的值.但是,当我让它调用difffst_函数时,我在尝试读取输入变量时会遇到段错误.

diffFst函数是用fortran编写的:

  5 …
Run Code Online (Sandbox Code Playgroud)

php c segmentation-fault php-extension php-internals

8
推荐指数
1
解决办法
352
查看次数

MSVC 2013'type':不是'std :: enable_if <false,void>的成员

我的SFINAE代码std::enable_if在GCC和Clang中使用编译,但在MSVC 2013中没有编译.

代码(在cpp.sh上也可用)是

#include <iostream>
#include <type_traits>

template <typename T, typename ... AdditionalInputs>
typename std::enable_if<sizeof...(AdditionalInputs) == 0, void>::type
CallDoDataProcessing(T var) {
    std::cout << sizeof...(AdditionalInputs) << " additional inputs" << std::endl;
}

template <typename T, typename ... AdditionalInputs>
typename std::enable_if<sizeof...(AdditionalInputs) == 1, void>::type
CallDoDataProcessing(T var) {
    std::cout << sizeof...(AdditionalInputs) << " additional inputs" << std::endl;
}

int main() {
    CallDoDataProcessing<int>(3);
    CallDoDataProcessing<int, int>(3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在GCC/Clang中,这在MSVC中完美运行,但我得到:

Error   1   error C2039: 'type' : is not a member of …
Run Code Online (Sandbox Code Playgroud)

c++ sfinae variadic-templates c++11 visual-studio-2013

7
推荐指数
1
解决办法
2052
查看次数

Qt PointCloud在Scene3D中的性能降低

我在编写的QML应用中看到了主要的性能问题,该应用是在Scene3d。以1000点/秒的速度可以,但是基本上以10,000点的速度就停止了我的整个计算机。目标是获得数百万个积分(这是旧的应用程序,在变慢之前,Qt / VTK混合可以完成)。

我担心我没有将处理任务转移到另一个线程中,或者渲染不正确。...这是我的第一个Qt项目,对所有这一切都是新的。

基本上,我建立了一个点的circle_buffer(每个点是32个字节),将其复制到QByteArray一个自定义的QGeometry上,一个上Entity。该实体具有运行顶点和片段着色器的材质。

我可以做些什么来提高性能吗?

材料

import Qt3D.Core 2.0
import Qt3D.Render 2.0

Material {
    effect: Effect {
        techniques: Technique {
            renderPasses: RenderPass {
                shaderProgram: ShaderProgram {
                    vertexShaderCode: loadSource("qrc:/shaders/pointcloud.vert")
                    fragmentShaderCode: loadSource("qrc:/shaders/pointcloud.frag")
                }
                renderStates: [
                    PointSize { sizeMode: PointSize.Programmable } //supported since OpenGL 3.2
                ]
            }
            graphicsApiFilter {
                api: GraphicsApiFilter.OpenGL
                profile: GraphicsApiFilter.CoreProfile
                majorVersion: 4
                minorVersion: 3
            }
        }
    }
        // some parameters...
}
Run Code Online (Sandbox Code Playgroud)

我的着色器非常简单:

顶点

#version 430

layout(location = 1) in …
Run Code Online (Sandbox Code Playgroud)

c++ performance qt glsl qml

5
推荐指数
1
解决办法
433
查看次数

QML 可以看到我的 Q_GADGET 但看不到 Q_OBJECT

为什么 my 可以Q_GADGET在 QML (JS) 中完美读取,但 my 却不能Q_OBJECT

在 Ubuntu 14.04 上运行 Qt 5.8.0。

QVariantMap我正在尝试将对象列表 ( ) 返回到 QML。我现在保持简单,没有指针等......只是对象的副本。

struct Blob
{
   Q_GADGET

   Q_PROPERTY(QString uuid MEMBER uuid_ CONSTANT)
   Q_PROPERTY(QVector3D centroid MEMBER centroid_)
   // ...

   Blob() {};
   ~Blob() = default;
   Blob(const Blob& blob);
 };
 Q_DECLARE_METATYPE(Blob)
Run Code Online (Sandbox Code Playgroud)

上有一堆QStringQVector3D成员Blob

在 main.cpp 中,我还注册了类型:

qmlRegisterType<Blob>("matt", 1, 0, "Blob");
Run Code Online (Sandbox Code Playgroud)

然后我的 JS 代码就能够毫无问题地读取对象上的所有属性(for 循环迭代它们)。

但如果我使用Q_OBJECT

struct Blob : public QObject
{
   Q_OBJECT

   Q_PROPERTY(QString uuid MEMBER uuid_ …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml

5
推荐指数
1
解决办法
2799
查看次数

奇怪的Fortran指针语法

在我必须处理的一些Fortran 77代码中,有一些指针以非常奇怪的方式声明,

 pointer  (iuu     , uu      ), (ivv     , vv      ),
 $        (it      , t       ), (iq      , q       ), (ips     , ps      ),
 $        (ittm    , ttm     ), (itqm    , tqm     ), (ipsm    , psm     ),
Run Code Online (Sandbox Code Playgroud)

这里的括号是什么意思?什么?

syntax fortran fortran77

3
推荐指数
1
解决办法
152
查看次数

使用Symfony2为AngularJS部分提供服务的最佳方法是什么?

我不确定我应该如何将Symfony的部分内容提供给Angular.

我在想我应该在Symfony中设置路由,然后让控制器输出文件?

我不确定如何简单地从控制器输出一个文件(即没有树枝的东西,没有真正渲染任何东西等).这个方法会正确缓存它吗?

例如,如果我想要角度下载partials/button.html,我应该设置如下路线:

partials:
    pattern:  /web/partials/{partial}
    defaults: { _controller: AcmeWebBundle:Partials:show, _format: html }
Run Code Online (Sandbox Code Playgroud)

然后,在我的控制器中,

...
public function showAction() {
    return file_get_contents(' ... path to file ...');
}
....
Run Code Online (Sandbox Code Playgroud)

这显然不起作用..我不知道如何输出一个直接的文件,而不通过树枝.或者也许我所有的部分应该只是twig文件(只是没有任何树枝的东西)?

symfony angularjs

3
推荐指数
1
解决办法
2026
查看次数

“foo_model”引用的 JVM 对象的类型为“Class&lt;Foo&gt;”,并且它无权访问“Foo”中声明的字段“float a”

为什么我无法访问数据类上的公共成员?

在我的测试 Android Kotlin/NDK 应用程序中,GetFloatField正在报告

“foo_model”引用的 JVM 对象属于“Class”类型,它无权访问“Foo”中声明的字段“float a”。

Class<Foo>是我用所有公共成员定义的数据类。

我是 Kotlin 新手,所以这个应用程序只是我学习如何在本机层之间传递自定义结构的一个练习。

MainActivity.kt

package com.example.structtest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

public data class Foo(var a: Float = 3.14f, var b: Int = 10)

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var f = Foo(3.14f, 10)

        var dFoo = doubleFoo(f)
        sample_text.text = "foo.a = ${dFoo.a}, foo.b=${dFoo.b}"
    }

    external fun doubleFoo(_foo : Foo): Foo

    companion object {
        // Used to load the …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android kotlin

3
推荐指数
1
解决办法
818
查看次数

从C调用Fortran函数时的EXC_BAD_ACCESS

我环顾四周,虽然有很多EXC_BAD_ACCESS问题,但它们都没有帮助.

我正在使用Mountain Lion(我认为OSX 10.8?)和PGI 12.

我似乎无法从C调用fortran函数,我写了一个简化的案例,似乎我无法传递整数.

我的fortran功能是:

  1 integer function smallFortran(a) result(res) bind(c,name='smallFortran_')
  2 !integer function smallFortran(a) result(res)
  3     
  4     use ISO_C_BINDING
  5     implicit none
  6     
  7     integer(kind=c_int), intent(IN) :: a
  8     !integer, intent(IN) :: a
  9     
 10     print *,'A = ', a
 11     res = a;
 12 
 13 endfunction smallFortran
Run Code Online (Sandbox Code Playgroud)

我的C函数是,

int main() {
   int ier=7;
   ier = smallFortran_(8);
}
Run Code Online (Sandbox Code Playgroud)

建立它..

matt@pontus:diffFst$ make                                                                                                               
pgcc -c cDoDiffFst.c                                                                                                                    
PGC-W-0267-#warning --  "Unsupported compiler detected" (/usr/include/sys/cdefs.h: 81)                                                  
PGC/x86-64 OSX 12.9-0: compilation completed with …
Run Code Online (Sandbox Code Playgroud)

c fortran fortran-iso-c-binding

1
推荐指数
1
解决办法
305
查看次数

oh-my-zsh:忽略未跟踪的文件

是否有任何选项/标志/设置oh-my-zsh可以使其在设置提示时默认忽略未跟踪的文件?

我的许多存储库都包含未跟踪的文件,这会导致即使没有修改的文件,提示也会在分支名称后面显示小星号:

matt@khea /tmp/dotfiles [master *]
Run Code Online (Sandbox Code Playgroud)

git zsh oh-my-zsh

1
推荐指数
1
解决办法
3511
查看次数