说我有以下内容:
template<typename TemplateItem>
class TestA
{
public:
TemplateItem Item;
void Function1(){;}
void Function2(){;}
void Function3(){;}
void Function4(){;}
//Etc etc number of functions is quite lengthy
};
template<typename TemplateItem>
class TestB : public TestA<TemplateItem>
{
public:
//How would I use the 'using' keyword to include everything from TestA
//Without manually declaring it for 20 or more functions/variables individually
};
Run Code Online (Sandbox Code Playgroud)
对于那些不熟悉模板类继承问题的人:
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19
有些人似乎仍然认为没有这样的遗传问题,尽管上面的链接说明相反,但引用上面给出的网站:
template<typename T>
class B {
public:
void f() { } ? member of class B<T>
};
template<typename T>
class D : public B<T> {
public:
void g()
{
f(); ? bad (even though some compilers erroneously (temporarily?) accept it)
}
};
Run Code Online (Sandbox Code Playgroud)
但是有关如何查找名称的问题.
澄清:
模板继承问题不是问题,它是上下文(因此我没有得到像'某某某类继承'这样的评论),问题是 using关键字只能应用于单个函数,很乏味 - 我想将它应用到整个TestA类,而不是使用关键字编写20+(这比使用50+这个 - > esque调用仍然更有效,无论如何都可能需要修改).
你误解了FAQ试图解释的内容.TestB当您尝试从其基类调用成员函数时,会发生名称查找问题,TestA因为后者的类型取决于模板参数.但是,所有TestA的公共成员都是TestB由其调用者继承并且可见.
TestB例如,当正在使用的某个人创建该类的实例时,TestB<int>不再存在名称查找问题,因为TestA已经解析了依赖类型,并且您可以自由地调用其任何公共成员.
如果你TestA<T>::FunctionX()要从其中一个TestB函数中调用,就会出现名称查找问题.正如常见问题解答建议的那样,如果您需要这样做,只需this->FunctionX()在内部调用该函数即可TestB.
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |