C++ 通过同一命名空间中的另一个类型访问类型
我有两个结构C++ 通过同一命名空间中的另一个类型访问类型,c++,C++,我有两个结构A和B位于同一名称空间中。出于架构和兼容性原因,我希望通过B访问A 我尝试了以下不起作用的方法: #include <iostream> struct A { static void print() { std::cout << "hello SO!" << std::endl; } }; struct B { typedef A A; // error here }; int main()
A
和B
位于同一名称空间中。出于架构和兼容性原因,我希望通过B
访问A
我尝试了以下不起作用的方法:
#include <iostream>
struct A
{
static void print()
{
std::cout << "hello SO!" << std::endl;
}
};
struct B
{
typedef A A; // error here
};
int main()
{
B::A::print();
return 0;
}
如果我给它另一个名称(例如,typedefaa2
),它会工作,但我希望它保持相同的名称
有趣的是,当我使用clang编译时,它实际上是有效的,但我需要同样使用gcc构建的代码
是否有某种方法可以实现这一点(即能够做到B::A::print()
)
我目前正在使用C++11,但如果有必要,可能会使用更新的版本。只需使用
typedef::a a
或使用a=::a
这里有一个解决方案:
#include <iostream>
namespace NS {
struct A {
static void print() { std::cout << "hello SO!" << std::endl; }
};
struct B {
using A = NS::A;
};
} // namespace NS
int main() {
NS::B::A::print();
return 0;
}
#包括
名称空间NS{
结构A{
静态无效打印(){std::cout@Ayxanstruct A
似乎在OP示例代码中的全局名称空间中。@Ayxan全局名称空间是一个名称空间。@Ayxan只不过是foo::A
特定于foo
名称空间,不适用于任何其他名称空间,如bar
。我看不出任何理由认为OP不会重新启动LISTER您需要适当地更改命名空间。@ LooTor我考虑使用NexNeNeNe= ANSUngulyType < /Cult>更易读,因为它类似于赋值,例如<代码> int NeXYVAR=8765 @ LUTAUCT<代码>可以使用模板/代码>代码> TyPufF不能直接模板化。更简洁,速度也快了一点,但是+1给出了一个名称空间示例。
#include <iostream>
namespace NS {
struct A {
static void print() { std::cout << "hello SO!" << std::endl; }
};
struct B {
using A = NS::A;
};
} // namespace NS
int main() {
NS::B::A::print();
return 0;
}