C模板 – 成员函数的部分特化
发布时间:2020-12-16 10:23:34 所属栏目:百科 来源:网络整理
导读:我试图专门化一些几何函数,取决于2D或3D,由模板参数指定.如果我为问题的玩具版本包含一些(非常破碎的)代码,那么最好: template typename T,int dclass Point{public: int x; int y; int z; T add () { return T(0); } template T add T,2 () { return x + y
我试图专门化一些几何函数,取决于2D或3D,由模板参数指定.如果我为问题的玩具版本包含一些(非常破碎的)代码,那么最好:
template <typename T,int d> class Point { public: int x; int y; int z; T add () { return T(0); } template <> T add <T,2> () { return x + y; } template <> T add <T,3> () { return x + y + z; } }; 这段代码很难编译.我已经尝试了很多模板参数格式和类定义的不同组合,并且在’d’上找不到一种方法来执行函数特化,同时保留’T’一般. 在我的实际解决方案中,我正在尝试计算专门用于2D或3D情况的渐变,曲率,插值等内容.有些事情,比如梯度计算,可以简单地使用’d’参数来限制for循环迭代.其他如插值,需要单独的2D和3D功能. 任何提示非常感谢! 解决方法
以下是您的示例的工作原理.您首先声明主要模板:
template <typename T,int d> class Point; 没有必要定义它,因为您没有一般实现. 接下来,为不同数量的维度创建部分特化,但部分特化仍将类型T作为模板参数: template <typename T> class Point<T,2> { public: T x; T y; T add() { return x + y; } }; template <typename T> class Point<T,3> { public: T x; T y; T z; T add() { return x + y + z; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |