小编a c*_*zen的帖子

Kcachegrind周期估计

转到他们的github页面并从其kde docs网站看到一些pdf手册后,我仍然感到困惑。假设测试代码中有这两行:

double a1 {asinh(1 / ep)};                   // 5 instr.
double b1 {log((1 + sqrt(1 + ep*ep)) / ep)}; // 12 instr.
Run Code Online (Sandbox Code Playgroud)

在哪里ep可以预定义一些值。通过使用反汇编器运行调试器,然后耐心地敲击“下一条指令”并计数,可以在代码块中找到并完成注释。如果我将其设置为显示“指令提取”,则这些与Kacachegrind所说的一致。我想这应该是有道理的(我是C ++的初学者)。但是,如果我切换到“周期估算”,则会得到一些非常奇怪的读数。对于当前示例,它是115122,但是其他看似相似的表达式,例如:

double Ap {1.0};
double ep {0.9};
Run Code Online (Sandbox Code Playgroud)

显示22222同时获取两者的显示)!这是怎么回事?有人可以解释一下吗?

c++ kcachegrind

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

C++模板,用于指向未定义类的成员函数,具有不同的参数,称为参数

我不是高级程序员.该问题的简短版本是:如何为全局函数创建一个模板,该函数调用指向仅在运行时已知的类的成员函数的指针(以及具有不同类型的参数的人)?

该函数是全局函数,其声明如下:

template<class T>
const double gExtFunc(const double &x,  \
                      const double &y,  \
                      const double &ep, \
                      const double &es, \
                      // function pointer here
                      const double &a,     \
                      const double &k,  \
                      double &mid_OUT,  \
                      short  &i_OUT,    \
                      double &eps_OUT,  \
                      short  &trip_OUT);
Run Code Online (Sandbox Code Playgroud)

这在some(virtual public)类中调用.例如(不使用ellipsis):

class DerivedA: virtual public Base
{
public:
    void funcA(...)
    {
        // ...
        m_varA = gExtFunc(...);
        // ... 
    }
    // ...
    const double commonFunc(const double &a, const double &k) const; …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers

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

Fortran 是否复制传递给函数/子例程的数组部分?

当将数组部分传递给 Fortran 中的子例程时,例如f(a, b, c(2:5,4:6))(所有这些都是二维数组),程序是先制作 的临时副本c,然后将其传递给子例程(作为引用、指针等),还是整个过程动态处理?

我正在尝试将一些 Fortran 代码转换为 C++,并且我看到对具有作为参数传递的数组部分的子例程的调用。据我所知,C++ 不允许这样做,所以我试图在 C++ 中像这样(mat2d = std::vector<std::vector<T>>):

f(mat2d &a, mat2d &b, mat2d *a, int rows, int rows, int offsetx, int offsety) {...}
Run Code Online (Sandbox Code Playgroud)

并调用为:

f(a, b, c.data(), ...)
Run Code Online (Sandbox Code Playgroud)

这有效,但它需要大小,以及我想要进行通用矩阵乘法的情况下的偏移量(例如)。所以,如果 Fortran 首先复制c(2:5,4:6)到(比如说)一个temp(4,3)数组,那么我可以在 C++ 中模仿它:简单地复制一个临时的,然后将该临时的引用传递给函数,没有行/列/偏移量. 但如果不是……我不介意听听别人的想法。


示例子程序:

subroutine f(A, B, C)
  implicit none
  real(kind(1d0)) :: A(2,2), B(2,2), C(2,2)
  C = A*B
  return
end f
Run Code Online (Sandbox Code Playgroud)

如果我的话不好,也许一张带有真实代码的图片就可以了?阵列是auxfour(4,4)aux44(4,4),和Gv(2,2)

代码

这是一个调用,具有auxp(5)相同的Gv …

c++ arrays fortran

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

函数的 C++ 可选 std::vector 参数

我在这里看到了一些答案,但它们可能不适用于这里。我有一个(成员)函数,它主要只与一个参数(第一个)一起使用:

const std::complex<double> Class::func(const std::complex<double> &x, \
                                       std::vector<double> &y = 0, \
                                       std::vector<double> &z = 0) const;
Run Code Online (Sandbox Code Playgroud)

我希望 fory并且z是可选的,甚至可能基于 type 的第四个参数string,类似于这样的:func( , , , const std::string &choice),但这只会让我只将一个参数传递给函数,而其他两个参数不会被使用。y例如,如果我确实通过了,它的声明必须在调用之前完成func(),对于 来说也是如此z,但我希望这是可选的,该函数在数学方面可能有点繁重,无需添加如果不需要,计算两个额外向量的负担。这可能吗?

c++ vector default-arguments

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

如何在启用/禁用 QComboBox/QSpinBox 时停止发出信号?

我有一个小型 Qt 绘图应用程序,并且我正在基于“主”组合框启用/禁用小部件(组合/旋转框)。例如,假设主设备是,它会根据combo1更改 中的条目,启用/禁用,并为选择中的某个条目设置一个值。不过,还有更多的小部件。combo2currentIndex()spin1spin1combo1

在聊天中(及以后)的小讨论之后,我使用了Qt::QueuedConnectionevery connect(),但这并没有阻止重新启用的小部件在重新启用时发出信号。这导致我connect()对所有重新启用的小部件都执行了许多操作,从而导致了多次绘图,这是我想避免的。就像现在一样,(几乎)所有小部件都plot()在 a 内部使用connect(),因此它是一个插槽的多个信号。

我的问题:有没有办法防止在重新启用小部件时发出信号?我可以plot()使用一些bool来检查绘图是否已执行并阻止相同类型的进一步操作,但这仍然会导致小部件发出信号并运行plot(),即使检查会阻止实际绘图,但这并不会这似乎不是可行的办法。我还希望避免运行installEventFilter()或类似的操作,因为这很可能会比之前的修复速度更慢。

c++ qt

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