gpt4 book ai didi

c++ - 如何将类的静态方法引入命名空间?

转载 作者:行者123 更新时间:2023-11-28 00:21:20 32 4
gpt4 key购买 nike

例如,我有一个类 A 和该类的静态方法 foo。我有一个命名空间 nm 并且想将 A::foo 引入到命名空间中。我尝试以下操作

namespace nm {
using A::foo;

void f()
{
foo(...); // use A::foo
}
}

但无法编译,因为 A 不是命名空间,因此 using 指令在这里不起作用。有什么方法可以实现这个想法?我想在我的 GUI 项目中将它用于 QObject::tr 和 QObject::connect 以节省一些空间。

最佳答案

不直接。 [命名空间.udecl]/8:

A using-declaration for a class member shall be a member-declaration. [ Example:

struct X {
int i;
static int s;
}

void f() {
using X::i; // error: X::i is a class member
// and this is not a member declaration.
using X::s; // error: X::s is a class member
// and this is not a member declaration.
}

— end example ]

但是你可以使用 SFINAE 和完美转发来模拟 foo:

template <typename... Args>
auto foo(Args&&... args)
-> decltype(A::foo(std::forward<Args>(args)...))
{
return A::foo(std::forward<Args>(args)...);
}

关于c++ - 如何将类的静态方法引入命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348968/

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