相关疑难解决方法(0)

将'typedef'从基于'模板'的派生类传播

我正在尝试定义基类,它只包含typedef.

template<typename T>
class A
{
public:
    typedef std::vector<T> Vec_t;
};


template<typename T>
class B : public A<T>
{
private:
    Vec_t v;  // fails - Vec_t is not recognized
};
Run Code Online (Sandbox Code Playgroud)

BI中为什么会收到Vec_t无法识别的错误,我需要明确写出来?

typename A<T>::Vec_t v;
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates typedef name-lookup

61
推荐指数
4
解决办法
3万
查看次数

为什么不允许在非推导的上下文中使用基类定义,以及如何解决这个问题?

我有以下代码:

#include <iostream>

template <typename T>
struct Base
{
    using Type = int;
};

template <typename T>
struct Derived : Base<T>
{
    //uncommmenting the below cause compiler error
    //using Alias = Type;
};

int main()
{
    Derived<void>::Type b = 1;
    std::cout << b << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在Type,Derived如果它在推导的上下文中,则可以使用typename - 如完全有效的声明所示b.但是,如果我尝试Type在其Derived自身的声明中引用,那么我得到一个编译器错误告诉我Type没有命名类型(例如,如果Alias取消注释的定义).

我想这与编译器Type在解析Derived参数的特定实例化的上下文之外的定义时无法检查是否可以从基类中引入时有关T.在这种情况下,这是令人沮丧的,因为Base 总是定义Type不论T.所以我的问题是双重的:

1).为什么地球会发生这种情况?通过这个我的意思是为什么编译器 …

c++ templates struct

10
推荐指数
1
解决办法
796
查看次数

标签 统计

c++ ×2

templates ×2

inheritance ×1

name-lookup ×1

struct ×1

typedef ×1