gpt4 book ai didi

c++ - 如何构建一个好的基于模板的 C++ 库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:49 26 4
gpt4 key购买 nike

<分区>

我正在设计一个高性能的 C++ 数学库,它(理想情况下)应该适用于任何领域(在数学上下文中,无论是实数还是复数)和 vector 空间。我最初认为使用模板可以解决问题,但我发现自己调试链接器和编译器错误比实际编写有用的代码更多。

我尝试构建的代码示例如下:

 template<class F, class G>
class LinearOperator { // For example a matrix multiplication A*x
Vector<G> Apply(const Vector<F>& vec); // Compute y = A*x
Vector<F> Adjoint(const Vector<G>& vec); // Compute x = transpose(A)*y
}

这样就可以继承自 LinearOperator构建自己的并可以自由选择输入和输出 vector 空间。例如,在实现实数傅立叶变换的情况下,输入 vector 将具有实数(例如 double )条目,但输出 vector 应该是复数类型。

根据我的研究,基本上有两种选择

  • 实现 header 中的所有函数,以便链接器在调用时始终内联它们。

    优点:仅包含 header 时不会出现链接器错误。

    缺点:这可能会增加二进制大小并可能使代码运行速度变慢(?)。

  • 在某些类型中明确声明类型 cpp实现文件(如 template class LinearOperator<double, std::complex<double>> )。但我想把决定权留给用户。

    优点:实现与声明分开。更好的二进制大小和(也许?)编译时优化。

    缺点:只能使用有限数量的类型,因此该库的灵 active 较低。此外,声明显式类型看起来有点奇怪。

我过去使用过 C++,但从未真正设计过库,也没有广泛使用过模板。您对如何做到这一点有任何见解吗?或者对我描述的选项有任何评论?例如,我不完全确定第一个选项的性能是否低于第二个选项。

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