首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机的C++ 2011标准函数可以从C例程调用吗?

随机的C++ 2011标准函数可以从C例程调用吗?
EN

Stack Overflow用户
提问于 2016-02-27 08:32:03
回答 3查看 133关注 0票数 3

我需要从一个范围内生成一个随机整数,并在@Walter的答案中发现了非常有趣的内容。但是,它是C++11标准,我需要使用C,有什么方法可以从C中调用吗?我在这里重复他的回答:

代码语言:javascript
复制
#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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-27 08:49:56

您不能在C中使用C++类,但是可以用函数包装C++功能,这些函数可以从C调用,例如在getrandom.cxx中:

代码语言:javascript
复制
#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中声明它:

代码语言:javascript
复制
extern "C" int get_random();

可以从C代码中调用它。

票数 5
EN

Stack Overflow用户

发布于 2016-02-27 08:38:25

如果要从C代码调用C++代码,可以将代码包装在extern "C"块中。函数签名必须是有效的C函数,然后C代码才能调用它。但是,函数的内容可以包括任何你想要的C++语言。

有关更多信息,请参见此问题:In C++ source, what is the effect of extern "C"?

票数 3
EN

Stack Overflow用户

发布于 2016-02-27 08:37:19

所有这些都封装在一个带有C++链接的extern "C"函数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35667524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档