我需要从一个范围内生成一个随机整数,并在@Walter的答案中发现了非常有趣的内容。但是,它是C++11标准,我需要使用C,有什么方法可以从C中调用吗?我在这里重复他的回答:
#include <random>
std::random_device rd; // only used once to initialise (seed) engine
std::mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case)
std::uniform_int_distribution<int> uni(min,max); // guaranteed unbiased
auto random_integer = uni(rng);发布于 2016-02-27 08:49:56
您不能在C中使用C++类,但是可以用函数包装C++功能,这些函数可以从C调用,例如在getrandom.cxx中:
#include <random>
static std::random_device rd;
static std::mt19937 rng(rd());
static std::uniform_int_distribution<int> uni(min,max);
extern "C" int get_random()
{
return uni(rng);
}这是一个导出带有C链接的C++函数的get_random模块(即,可以从C调用),您可以在getrandom.h中声明它:
extern "C" int get_random();可以从C代码中调用它。
发布于 2016-02-27 08:38:25
如果要从C代码调用C++代码,可以将代码包装在extern "C"块中。函数签名必须是有效的C函数,然后C代码才能调用它。但是,函数的内容可以包括任何你想要的C++语言。
有关更多信息,请参见此问题:In C++ source, what is the effect of extern "C"?
发布于 2016-02-27 08:37:19
所有这些都封装在一个带有C++链接的extern "C"函数中。
https://stackoverflow.com/questions/35667524
复制相似问题