首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带libpq++和SQLAPI++的C++和Postgresql

不带libpq++和SQLAPI++的C++和Postgresql
EN

Stack Overflow用户
提问于 2016-07-27 01:34:18
回答 1查看 426关注 0票数 2

我如何不使用libpq++或SQLAPI++在C++和Postgresql之间建立一个接口,因为我试图安装这两个库,但是我做不到(没有windows的教程)。我知道Postgis和Pgrouting使用C++ ..也许他们使用另一个库来与Postgresql接口。

谢谢你:D

EN

回答 1

Stack Overflow用户

发布于 2016-07-27 06:52:30

有用的文档:

对于要用c++编码并将返回集的函数foo,我有以下文件:

  • foo.c
  • foo_driver.h
  • foo_driver.cpp

foo.c

遵循“35.9.9.9.返回集(一个简单的SRF返回复合类型的完整示例)”,除了我们调用一个静态函数,该函数在调用实际的c++函数之前会做一些事情(主要是读取更多的数据)。

代码语言:javascript
复制
  static process ( char* a, bool b, bool c, mystruct* result_tuples, int result_count) {

    <maybe some checking or conversions here of a, b, & c>
    call_cpp_function( a1, b1, c1, result_tuples, result_count )

    }

    PG_FUNCTION_INFO_V1(foo);
    Datum
    foo(PG_FUNCTION_ARGS)    {
      ...
      process(
                pgr_text2char(PG_GETARG_TEXT_P(0)),
                PG_GETARG_BOOL(1),
                PG_GETARG_BOOL(2),
                &result_tuples,
                &result_count);
      ...
      } // end of first call
      ...
      if (call_cntr < max_calls) {
      ...
      else {
        free(result_tuples);
        SRF_RETURN_DONE(funcctx);
      }
    };

foo_driver定义了将在C代码和C++代码上使用的C++函数

代码语言:javascript
复制
#ifdef __cplusplus
extern "C" {
#endif

void  call_cpp_function( <parameters > );


#ifdef __cplusplus
}
#endif

foo_driver.cpp

有函数"call_cpp_function“的实际cpp代码这里不包括postgres文件,当然你可以在这里包含更多的c++文件。特殊规则:

在创建结果C数组时,不要忘记尝试/捕获,或者您可以尽快使服务器崩溃containers

  • don't

  • 将C数组转换为C++ C++在
  • 代码上使用指针(请记住,我的示例返回的是try

完成最后一次调用后,不要忘记“”语句

例如

代码语言:javascript
复制
#include < vector >
#include < deque >
#include "myclass.h"
void  call_cpp_function( <parameters > ) {
  try {
   <process>
   // use malloc to prepare the C array


  } catch( .. ) {
  // do cleanup
  }
}

注意:本答案中未涉及的内容:编译、链接、添加为扩展。

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

https://stackoverflow.com/questions/38596443

复制
相关文章

相似问题

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