Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C+中继承tamplate并访问其参数+; 我试图继承C++中的模板。此模板使用名称空间NSA,子类还有一个名为NSB的名称空间。 我想在第三个类中访问模板的受保护变量。 但我不知道怎么做_C++_Templates_Inheritance_Namespaces - Fatal编程技术网

如何在C+中继承tamplate并访问其参数+; 我试图继承C++中的模板。此模板使用名称空间NSA,子类还有一个名为NSB的名称空间。 我想在第三个类中访问模板的受保护变量。 但我不知道怎么做

如何在C+中继承tamplate并访问其参数+; 我试图继承C++中的模板。此模板使用名称空间NSA,子类还有一个名为NSB的名称空间。 我想在第三个类中访问模板的受保护变量。 但我不知道怎么做,c++,templates,inheritance,namespaces,C++,Templates,Inheritance,Namespaces,这些是标题: NSA{ template <typename T> class A{ protected: unsigned int my_var; } } NSB{ class B{ #Don't know how to inherit template A ... } } 谢谢。您不能从模板派生;只能从类派生。因此类B必须从A的实例化中派生: class B : public A<int> { };

这些是标题:

NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    }
}

NSB{
    class B{ #Don't know how to inherit template A
    ...
    }
}

谢谢。

您不能从模板派生;只能从类派生。因此
类B
必须从
A
实例化中派生:

class B : public A<int> {
};
在任何一种情况下,访问基类的成员都比使用普通类要复杂一些,因为模板可以被专门化,并且在模板中声明的成员可能不存在于特定的专门化中。所以你必须说你在谈论一个成员:

class B : public A<int> {
    unsigned f() { return A<int>::my_var; }
};
B类:公共A类{
无符号f(){return A::my_var;}
};
这里有另一种说法:

class B : public A<int> {
    unsigned f() { return this->my_var; }
};
B类:公共A类{
无符号f(){返回此->我的变量;}
};

跳过“C”字眼(你没有解释清楚)

我相信这就是你想要的:

namespace NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    };
}

namespace NSB{
    class B : public NSA::A<int> {
                        //  ^^^ some type or make class B as template 
    //...

    unsigned int x = my_var;
    };
}
名称空间NSA{
模板类别A{
受保护的:
无符号int my_var;
};
}
名称空间NSB{
B类:公共NSA::A{
//^^^某种类型或将类B作为模板
//...
无符号整数x=我的变量;
};
}

C类
来自哪里?您在
NSA
NSB
之前缺少
namespace
。可能是相关的/dup:Class C只是第三个Class,我在其中包含Class a和Template B的标头。请阅读。可能重复的
class B : public A<int> {
    unsigned f() { return this->my_var; }
};
namespace NSA{
    template <typename T> class A{
    protected:
       unsigned int my_var;
    };
}

namespace NSB{
    class B : public NSA::A<int> {
                        //  ^^^ some type or make class B as template 
    //...

    unsigned int x = my_var;
    };
}