gpt4 book ai didi

c++ - 我可以在 fnc def 中使用 using 吗?

转载 作者:行者123 更新时间:2023-11-28 01:03:06 25 4
gpt4 key购买 nike

我有一个这种形式的结构:

template<class X>
struct Base
{
X get_data()
{
return X();
}
};

template<class X>
struct Derived : Base<X>
{
X do()
{
auto v = get_data();//this get is from Base
}

};

我尝试按显示的方式使用此 get,但出现错误:“get_data”没有依赖于模板参数的参数,因此“get_data”的声明必须可用 [-fpermissive]|< br/>好的,我试过了:

X do()
{
using Base<T>::get_data;
auto v = get_data();//this get is from Base
}

我有以下 error: 'Derived<T>::Base' is not a namespace .现在,我遇到了一个问题,因为事实上正式的 Base 是一个结构是一个命名空间(的特殊形式)但无论如何,我声明使用 Base<T>::get_data;在任何 fnc 之外,这个编译。所以问题是:在 fnc 体内是否允许编译器错误或使用“using declaration”?

最佳答案

对基类成员名称使用指令仅在类级别有意义,它们用于使基类成员的名称可见,否则可能会隐藏。

它们在函数范围内没有意义,因此在那里是不允许的。

你可以做的是:

struct Derived : public Base<X>
{
using Base<X>::get_data;
//...
};

(这仅在此处有意义,因为您的模板上下文以及 get_data() 不依赖于任何模板参数的事实。在普通类中,您根本不需要它如果您没有故意隐藏该功能。)

在函数范围内,唯一允许的using 指令是那些从其他命名空间 引入名称以进行参数相关查找的指令。

另请注意,do 是 C++ 关键字。

关于c++ - 我可以在 fnc def 中使用 using 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805867/

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