我想在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) 我写一个代码来解决以下问题:给定一组数字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/)的文档
感谢所有的帮助提前.