我正在尝试为数学编程编写一个大小和类型泛型向量类.我遇到部分专业化的问题.
当我尝试将给定大小的vector类的成员方法专门化时,会出现问题.
我可以提供一个简单的例子:
template <size_t Size,typename Type> class TestVector { public: inline TestVector (){} TestVector cross (TestVector const& other) const; }; template < typename Type > inline TestVector< 3,Type > TestVector< 3,Type >::cross (TestVector< 3,Type > const& other) const { return TestVector< 3,Type >(); } void test () { TestVector< 3,double > vec0; TestVector< 3,double > vec1; vec0.cross(vec1); }
在尝试编译这个简单示例时,我收到一个编译错误,指出’cross’特化与现有声明不匹配:
error C2244: 'TestVector<Size,Type>::cross' : unable to match function deFinition to an existing declaration see declaration of 'TestVector<Size,Type>::cross' deFinition 'TestVector<3,Type> TestVector<3,Type>::cross(const TestVector<3,Type> &) const' existing declarations 'TestVector<Size,Type> TestVector<Size,Type>::cross(const TestVector<Size,Type> &) const'
我试图将cross声明为模板:
template <size_t Size,typename Type> class TestVector { public: inline TestVector (){} template < class OtherVec > TestVector cross (OtherVec const& other) const; }; template < typename Type > TestVector< 3,Type >::cross< TestVector< 3,Type > > (TestVector< 3,Type >(); }
此版本通过编译但在链接时失败:
unresolved external symbol "public: class TestVector<3,double> __thiscall TestVector<3,double>::cross<class TestVector<3,double> >(class TestVector<3,double> const &)const
我在这里错过了什么?
谢谢,
弗洛朗
解决方法
一种方法是将cross定义为“functor”(即带有operator()的类).
template<size_t S,typename T> class Vec { // ... stuff friend struct Cross<S,T>; Vec<S,T> cross(const Vec<S,T>& other) { return Cross<S,T>()(*this,other); } // ... more stuff }; template<size_t S,typename T> struct Cross { Vec<S,T> operator() (const Vec<S,T>& a,const Vec<S,T>& b) { // general deFinition } }; // Partial specialization template<typename T> struct Cross<3,T> { vec<3,T> operator() (const Vec<3,const Vec<3,T>& b) { // specialize deFinition } };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。