我正在编写小型矩阵库,它使用奇怪的重复模板模式,我面临以下问题。
必须上课Base
和Derived
。 Derived具有模板参数,表示某些标量类型。我想在Base中创建cast方法,它将类似Derived的类转换为Derived-like和另一个标量。
以下代码看起来很好,但在gcc 7.2.0
template<typename Derived>
class Base
{
public:
template<typename OtherT>
auto cast() const
{
return (static_cast<Derived*>(this))->cast<OtherT>();
}
};
template<typename T>
class Derived : public Base<Derived<T>>
{
public:
template<typename OtherT>
Derived<OtherT> cast() const
{
return Derived<OtherT>();
}
};
int main()
{
Derived<float> der;
return 0;
}
错误讯息:
a.cpp:14:51: error: expected primary-expression before ‘>’ token
return (static_cast<Derived*>(this))->cast<OtherT>();
^
a.cpp:14:53: error: expected primary-expression before ‘)’ token
return (static_cast<Derived*>(this))->cast<OtherT>();
但是使用gcc 6.4.0
一切正常
有没有办法解决它?
PS抱歉我的英语不好。