如何在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;
};
}