相关疑难解决方法(0)

使用gsl和c ++时如何避免静态成员函数

我想在c ++类中使用GSL而不将成员函数声明为static.原因是因为我不太了解它们,我不确定线程​​的安全性.从我读到的,std::function可能是一个解决方案,但我不知道如何使用它.

我的问题归结为如何static在声明中删除g

#include<iostream>
#include <functional>
#include <stdlib.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_monte.h>
#include <gsl/gsl_monte_plain.h>
#include <gsl/gsl_monte_miser.h>
#include <gsl/gsl_monte_vegas.h>


using namespace std;

class A {
public:
  static double g (double *k, size_t dim, void *params)
  {
    double A = 1.0 / (M_PI * M_PI * M_PI);
    return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2]));
  }
  double result() {
    double res, err;

    double xl[3] = { 0, 0, 0 …
Run Code Online (Sandbox Code Playgroud)

c++ callback gsl c++11 std-function

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

传递类的私有方法作为std :: sort的比较运算符

我写一个代码来解决以下问题:给定一组数字x[0],x[1],... x[N-1],发现,使得他们在升序排序的置换.在换句话说,我想找到一个置换{0,2,...,N-1}如i[0],i[1]......,i[N-1]这样x[i[0]] <= x[i[1]] <= ... <= x[i[N-1]].

为此,我将x向量和索引向量i(最初填充i[j] = j)存储为类的私有成员.我还定义了一个私有方法

bool MyClass::compare(size_t s, size_t t) {
    return (x[s] < x[t]);
}
Run Code Online (Sandbox Code Playgroud)

现在,我打电话std::sort如下

std::sort(i.begin(), i.end(), compare);
Run Code Online (Sandbox Code Playgroud)

我期望得到理想的结果.但是代码没有编译,我收到以下错误:

error: no matching function for call to ‘sort(std::vector<long unsigned int>::iterator, std::vector<long unsigned int>::iterator, <unresolved overloaded function type>)’
Run Code Online (Sandbox Code Playgroud)

我必须正确完成所有事情,以及std::sort提及我可以将函数作为比较运算符传递给std::sort(http://www.cplusplus.com/reference/algorithm/sort/)的文档

感谢所有的帮助提前.

c++ sorting std

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

标签 统计

c++ ×2

c++11 ×1

callback ×1

gsl ×1

sorting ×1

std ×1

std-function ×1