gpt4 book ai didi

c++ - 模板成员函数特化

转载 作者:行者123 更新时间:2023-11-30 01:55:44 33 4
gpt4 key购买 nike

我有这个:

//forward declaration
template<typename Elem, int D1 = 1, int D2 = 1, int D3 = 1>
class matrix;

template<typename Elem, int D1, int D2, int D3>
struct matrix_deref_type_trait
{
typedef matrix<Elem, D2 == 1 ? 1 : D1, D3 == 1 ? 1 : D2, 1> matrix_deref;
};

template<typename Elem, int D1>
struct matrix_deref_type_trait<Elem, D1, 1, 1>
{
typedef Elem matrix_deref;
};

template<typename Elem, int D1, int D2, int D3>
class matrix:public object
{
public:
typedef typename matrix_deref_type_trait<Elem, D1, D2, D3>::matrix_deref matrix_deref;

inline matrix_deref operator[](int J)
{
...
}
}

并且想为 operator[] 特化一个案例(在类主体之外):

template<typename Elem, int D1>
typename matrix<Elem, D1, 1, 1>::matrix_deref matrix<Elem, D1, 1, 1>::operator[](int J)
{
return M_ptr[J];
}

但是我收到了这个错误:

error C2244: 'matrix<Elem,D1,D2,D3>::operator []' : unable to match function definition to an existing declaration

我可以在不完全特化整个类的情况下覆盖这个成员函数吗?我应该怎么办?谢谢。

最佳答案

您不能专门化模板类的非模板方法。您只能专门化模板类本身。或者您可以专门化任何(模板或非模板类)的模板方法。

特化模板类的非模板方法没有意义:编译器需要知道整个类的外观。你只是在说:嘿,我不关心这个类,但我知道这个方法会是什么样子。

关于c++ - 模板成员函数特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20416412/

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