Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在联合内部访问类_C++_Namespaces_Unions - Fatal编程技术网

C++ 在联合内部访问类

C++ 在联合内部访问类,c++,namespaces,unions,C++,Namespaces,Unions,我在第三方库中有classA的声明,因此无法修改它。 我需要使用类B的声明将其传递给一个方法,有没有一种方法可以在不修改类a的情况下执行此操作? 当我尝试这个: #include <iostream> using namespace std; class A { public: union { class B { public: int x; }; }un; };

我在第三方库中有class
A
的声明,因此无法修改它。 我需要使用类
B
的声明将其传递给一个方法,有没有一种方法可以在不修改类
a
的情况下执行此操作?

当我尝试这个:

#include <iostream>
using namespace std;
class A
{
    public:
    union {
        class B
        {
            public:
            int x;
        };
    }un;
};

void foo(A::B & test)
{
}

int main() {
    A::B test;
    test.x=10;
    cout << test.x << endl;
    return 0;
}
致:

这将通过以下方式实现:

A::T::B test;

您可以使用
decltype
获取联合类型,然后可以访问
B

decltype(std::declval<A&>().un)::B test;

decltype(std::declval

Wow!太快了!谢谢,顺便说一句,我想知道c++03是否也可以这样做
A::T::B test;
decltype(std::declval<A&>().un)::B test;