我实现了一些我希望尽可能便携的C ++代码。我想避免依赖于需要root访问权限才能安装的库。此外,我更愿意避免在我的存储库中保留大型库的副本,而且我也不希望不进行库的用户级安装(仅仅因为我必须在多台计算机上手动安装它们)。 )
我想在我的项目中使用Boost的normal_distribution
功能。我了解安装Boost的典型方法需要sudo apt-get
或sudo yum
类型的命令,但我不会在运行此代码的系统上具有root访问权限。为了解决这个问题,我想知道是否可以在我的代码目录中放置Boost normal_distribution.cpp和normal_distribution.hpp的副本,并使用这些文件编译/链接我的代码。这会有用吗?
读者可能想知道为什么我不只是在TR1或C ++ 11中使用normal_distribution
实现。答案是我需要保持与仍然运行g ++ 4.1.x的大学管理集群的兼容性,这至少在我的经验中并不支持<TR1/random>
。
答案 0 :(得分:3)
我认为BCP (Boost Copy)正是根据你的情况编写的。
答案 1 :(得分:2)
您应该查看ryppl项目,因为这正是它希望实现的目标。如果你按照github的链接你会发现模块化的提升,你可以继续尝试完整的ryppl安装。在任何情况下都有一个中途的房子,那是modularised boost。还有一个模块化的boost / cmake,使其更简单。这是ryppl希望获得提升的方向,它应该是非常有用的。我能看到的唯一缺点是使用python脚本为零安装安装程序的倾向。
如上所述,BCP也是为此目的而开发的,因此有一个选择。请注意,虽然boost正在经历svn-> git更改,这似乎正在影响某些结构,这反映在与当前模块化提升的一些不一致中,我不确定如何/如果这会影响BCP,因为我不知道那个系统。
答案 2 :(得分:0)
我在让BCP正常工作方面遇到了一些麻烦。我记录了BCP-related question in this StackOverflow post。
从短期来看,我刚刚在我的代码库中添加了normal_distribution
函数。我把它放在几个过去的StackOverflow帖子中。这个实现没有做任何花哨的模板,但它看起来非常类似于normal_distribution
的Boost,TR1和C ++ 11 API。
#include "math.h"
double normal_distribution(double mean, double stdDev)
{
//scale the number to appropriate distribution
return mean + (sampleNormal()*stdDev);
}
//get a number from normal distribution (mean=0, stdDev=1).
double sampleNormal() {
double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
double r = u * u + v * v;
if (r == 0 || r > 1) return sampleNormal(); //recursively re-generate number if doesn't meet criteria
double c = sqrt(-2 * log(r) / r);
return u * c;
}
感谢this StackOverflow post(用户Pete855217)提供了sampleNormal()
函数,感谢this StackOverflow post(user5084)我已命名为normal_distribution()
的函数。