gpt4 book ai didi

c++ - 调用同名基类的模板函数成员

转载 作者:行者123 更新时间:2023-11-28 00:07:12 24 4
gpt4 key购买 nike

我试图理解为什么以下代码无法编译(使用 gcc 4.8.2):

struct A {
template <typename T>
T f() {return T(0);}
};

struct B : A {
using MyT = int;
MyT f() {return (A *)this->template f<MyT>();}
};

int main()
{
B b;
std::cout << b.f() << std::endl;
return 0;
}

如果我在基础中将名称从 f 更改为 f1,那么下面的编译就可以了:

struct A {
template <typename T>
T f1() {return T(0);}
};

struct B : A {
using MyT = int;
MyT f() {return this->template f1<MyT>();}
};

最佳答案

仅仅因为运算符优先级,您将 f 函数的结果转换为 A*,而不是将 this 转换为 A* 并且实际上使用 static_cast 更好。

MyT f() {return static_cast<A*>(this)->f<MyT>();}

这会起作用。而且你有名字隐藏,你只需这样做:

struct B : A {
using MyT = int;
using A::f;
MyT f() {return this->f<MyT>();}
};

关于c++ - 调用同名基类的模板函数成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com