gpt4 book ai didi

c++ - 将 C 库移植到 C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:33 39 4
gpt4 key购买 nike

我想知道这是否是移植 C 的正确方法图书馆到C++ ;对于这个例子,我写了一个 2 行的 C 头文件,其中包含一个函数和一个 typedef。管理指针。

lib.h

#ifndef LIB_H
#define LIB_H

#include <math.h>

double foo(double a) { return (log(a)); }

typedef double (*PtoFoo)(double);

#endif // LIB_H

lib.hpp

#ifndef LIB_HPP
#define LIB_HPP

namespace lib {
extern "C" {
#include "lib.h"
}
}

#endif // LIB_HPP

并在 C++11 中进行了一些测试

#include <iostream>
#include "lib.hpp"
#include <functional>

int main() {
// call to the function
std::cout << lib::foo(42354.343) << "\n";
// trying the pointer to function type
lib::PtoFoo ptr = lib::foo;
std::function<double(double)> f(ptr);
std::cout << f(342.4) << "\n";
return (0);
}

现在我的注意力集中在指针、函数指针和函数上,但总的来说我想知道这是否是移植标准 C 的正确方法代码为 C++并使用带有命名空间的新 C++ 接口(interface),而不会适得其反。

最佳答案

是的,这是正确的做法。

或者,您可以使用 __cplusplus 预处理器标记在同一个头文件中定义 C++ 接口(interface):

#ifdef __cplusplus
namespace lib {
extern "C" {
#endif

typedef ...

#ifdef __cplusplus
}
}
#endif

这种方法的优点是只需要一个头文件。

关于c++ - 将 C 库移植到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551783/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com