例如,我有一个类A
和一个静态方法foo
。我有一个名称空间nm
,并希望将A :: foo引入名称空间。我尝试以下
namespace nm {
using A::foo;
void f()
{
foo(...); // use A::foo
}
}
但无法编译,因为A不是命名空间,因此using指令在这里不起作用。有没有办法实现这个想法?我想在我的GUI项目中将它用于QObject :: tr和QObject :: connect以节省一些空间。
答案 0 :(得分:3)
不直接。 [namespace.udecl] / 8:
类成员的 using-declaration 应为 member-declaration 。 [示例:
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. }
- 结束示例]
但您可以使用SFINAE模拟foo
并完美转发:
template <typename... Args>
auto foo(Args&&... args)
-> decltype(A::foo(std::forward<Args>(args)...))
{
return A::foo(std::forward<Args>(args)...);
}