如何调用模板基类中的模板成员函数?
在基类中调用非模板化成员函数时,可以使用 using
将其名称导入到派生类中,然后使用它。 这对于基类中的模板成员函数也可能吗?
仅使用using
它不起作用(使用g++-snapshot-20110219 -std=c++0x):
template <typename T>
struct A {
template <typename T2> void f() { }
};
template <typename T>
struct B : A<T> {
using A<T>::f;
template <typename T2> void g() {
// g++ throws an error for the following line: expected primary expression before `>`
f<T2>();
}
};
int main() {
B<float> b;
b.g<int>();
}
我知道显式为基类添加前缀可以
A<T>::template f<T2>();
很好地工作,但问题是:是否可以不使用或使用简单的 using 声明(就像 f
不是模板函数的情况一样) )?
如果这是不可能的,有谁知道为什么?
When calling a non-templated member function in a base class one can import its name with using
into the derived class and then use it. Is this also possible for template member functions in a base class?
Just with using
it does not work (with g++-snapshot-20110219 -std=c++0x):
template <typename T>
struct A {
template <typename T2> void f() { }
};
template <typename T>
struct B : A<T> {
using A<T>::f;
template <typename T2> void g() {
// g++ throws an error for the following line: expected primary expression before `>`
f<T2>();
}
};
int main() {
B<float> b;
b.g<int>();
}
I know that prefixing the base class explicitly as in
A<T>::template f<T2>();
works fine, but the question is: is it possible without and with a simple using declaration (just as it does for the case where f
is not a template function)?
In case this is not possible, does anyone know why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这有效(双关语):
this->template f();
也是如此
为什么
using
不适用于依赖于模板的模板函数,原因很简单-- 语法不允许在该上下文中使用所需的关键字。this works (pun intended):
this->template f<T2>();
So does
Why
using
doesn't work on template-dependent template functions is quite simple -- the grammar doesn't allow for the required keywords in that context.我相信你应该使用:
或:
I believe you should use:
or: