没有实体,建议用对应的函数进行创建,不暴露内部结构。
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_CIPHER_CTX_init(ctx);
//do sth here
//...
EVP_CIPHER_CTX_free(ctx);
举个例子
/* a.cpp */
#include"a.h"
#include<stdio.h>
struct Test
{
int a;
int b;
};
Test * create()
{
return new Test{1,2};
}
void print(Test *a)
{
printf("a = %d; b = %d\n",a->a,a->b);
}
/*a.h*/
struct Test;
Test * create();
void print(Test *);
/*b.cpp*/
#include"a.h"
int main()
{
Test *t;
t = create();
print(t);
}
- 先将
b.cpp
编译成一个.o库.静态库。 - 这个时候就等价于
openssl
里面的lib
库 - 然后只留
.h
头文件,这就隐藏了实现细节。单个编译的时候就不需要知道实体在哪儿,开发者也没有必要知道在哪儿。 - 最后编译
b.cpp
的时候将对应库添加进来就可以了。
来源:oschina
链接:https://my.oschina.net/u/3695598/blog/3217403