gpt4 book ai didi

c++ - 如何在类声明范围内使用 `using space::function`?

转载 作者:行者123 更新时间:2023-11-30 05:40:51 25 4
gpt4 key购买 nike

我想使用 using 声明在特定函数查找上启用 ADL,以便我可以在构造函数初始化列表中使用它。

代码如下:

template< typename T >
struct RefWrapper
{
RefWrapper(T& t)
: w(t)
{}

T& w;
};

struct Val
{
Val(RefWrapper<Val> rw)
{/*...*/}
};

namespace X
{
template< typename T >
RefWrapper<T> MakeWrap(T& t)
{ return RefWrapper<T>(t); }
}

namespace Y
{
using X::MakeWrap; // god no !
struct C
{
//using X::MakeWrap; // I want it here
// error: using-declaration for non-member at class scope

C(Val& value) : member(MakeWrap(value))
{}

Val member;
};
}

相关:
How narrow should a using declaration be?
在这个问题的唯一答案中,(4)是不可能的,但它是我想要的地方!

最佳答案

很遗憾,您不能那样做。

N4527::7.3.3$3,using 声明,[namespace.udecl]:

In a using-declaration used as a member-declaration, the nested-name-specifier shall name a base class of the class being defined.

当然,您可以像这样显式指定嵌套名称说明符:

C(Val& value) : member(X::MakeWrap(value))

或者作为解决方法,您可以使用本地包装函数,如下所示:

struct C
{
//using X::MakeWrap; // I want it here
// error: using-declaration for non-member at class scope

C(Val& value) : member(MakeWrap(value))
{}

Val member;
private:
template< typename T >
T MakeWrap(T& t) { return X::MakeWrap(t); }

};

关于c++ - 如何在类声明范围内使用 `using space::function`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396895/

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