在使用一个有模板的基类中的using
时,我遇到了冗长的问题。在下面的代码中,派生类试图使用其基类中的my_type
。
template <typename T>
class Base {
public:
using mytype = T;
};
template <typename T>
class Derived : public Base<T>{
public:
// using the base's mytype here
static typename Base<T>::mytype func() { return 0;}
};
然而,在实践中,我发现这对于看起来应该更简单的事情来说是非常繁琐的。如果基类不是模板化的,则不需要
<T>
或typename(显然)。在我的实际问题中,我有大量从基类派生的类,并且我希望尽可能简化此操作。我目前所拥有的内容就像下一个示例一样,我只是添加了一个额外的
using
以从基类获取类型,但它感觉像是我不需要拥有的多余层。template <typename T>
class Derived : public Base<T>{
public:
using base_type = typename Base<T>::mytype;
static base_type func() { return 0;}
};
这可能看起来像是一个愚蠢的问题,但在派生类中使用基类的mytype
的次数非常多,使得前者相当丑陋。有没有一种正确的方法可以从模板化的基类中获取类型并保持可读性?
using
或typedef
的解决方案也是我会使用的。 - user955279using base = Base<T>; static typename base::mytype func();
或者using self = Derived; static typename self::mytype func();
. - dypmytype
设置为T
,并在派生类中将T
作为模板参数传递。为什么不直接将T
作为函数的返回类型呢? - Zac Howlanddecltype
。 - Ryan Haining