N******K 发帖数: 10202 | 1 核心库是c++ template写的 打算隐藏起来 只提供一些接口
怎么搞? |
k**********g 发帖数: 989 | 2
Very difficult, and it will defeat some of the advantages of using C++
templates.
First of all, there is no such thing as shipping a binary or encoded version
of C++ template code without being "instantiated".
To instantiate, you need to provide all of the template parameters. In other
words, you need to know exactly what types will be needed by your customers.
http://en.cppreference.com/w/cpp/language/function_template#Exp
http://en.cppreference.com/w/cpp/language/template_specializati
Once that is done, you can use a combination of enums and function pointers
(and also C++ interfaces / abstract classes) to provide a de-genericized API.
Very difficult, but OpenCV is able to achieve something similar. The "de-
genericize" layer will contain a lots of enum checking and dispatching.
Also read this one: although I am not sure how relevant it is. https://www.
cisuc.uc.pt/publication/show/3134
Also read this one (generate machine code from C++ code) https://code.google
.com/p/jitasm/
【在 N******K 的大作中提到】 : 核心库是c++ template写的 打算隐藏起来 只提供一些接口 : 怎么搞?
|
b*******s 发帖数: 5216 | 3 instantiation + 头文件里extern声明
【在 N******K 的大作中提到】 : 核心库是c++ template写的 打算隐藏起来 只提供一些接口 : 怎么搞?
|
d****i 发帖数: 4809 | 4 不提供头文件不行吧,头文件相当于接口,没有接口人家怎么用你的库?你可以在你的
cpp文件里面实现你的类,然后在最后加上instantiation,比如
template class MyClass;
template class MyClass;
template class MyClass;
...
这样你只需提供lib和相应的头文件,而把你的实现代码隐藏
【在 N******K 的大作中提到】 : 核心库是c++ template写的 打算隐藏起来 只提供一些接口 : 怎么搞?
|
m********5 发帖数: 17667 | 5 很不方便
以前搞过,
大致就是Explicit Instantiation,每个可能用到的type编一遍
非常不practical
一般来说 C++ template lib 必开源
这是C++最大的问题之一,而不用template,用C++就很痛苦
但C++11 有 extern template,解决了这个问题
【在 N******K 的大作中提到】 : 核心库是c++ template写的 打算隐藏起来 只提供一些接口 : 怎么搞?
|