我在C++项目中使用用C语言编写的a high performance/parallel graph library。它提供了一个结构stinger
(图形数据结构)和操作类似C/C++:使用适配器模式会降低性能吗?
int stinger_insert_edge_pair (struct stinger *G,
int64_t type, int64_t from, int64_t to,
double weight, int64_t timestamp) { .... }
大部分时间,不过,我不希望指定时间戳或重量或类型。默认参数会很好。此外,一个类似OOP的界面会很好:G->insertEdge(u, v)
而不是insert_edge_pair(G, u, v, ...)
。
所以我想创造一个适配器类看起来像
class Graph {
protected:
stinger* stingerG;
public:
/** default parameters ***/
double defaultEdgeWeight = 1.0;
/** methods **/
Graph(stinger* stingerG);
virtual void insertEdge(node u, node v, double weight=defaultEdgeWeight);
};
的方法insertEdge(...)
简单地调用stinger_insert_edge_pair(this->stingerG, ...)
用适当的参数。
但是,性能是一个关键的方面。与使用这样的适配器类相关的性能损失是多少?与使用“裸体”库相比,我是否应该期望性能下降?
很难分辨没有分析。除此之外,良好编码的一般方面仍然存在。 – DumbCoder
“除此之外,良好编码的一般方面仍然存在。”在您看来,使用这种适配器是否合适? – clstaudt
为什么要适应虚拟功能?你想提供不同种类的适配器吗?一个简单的适配器将调用转发给内联方法中的c api应该有近乎开销。 – hansmaad