C++ 这个模板化代码是如何编译的?
我很难理解它是如何编译的:C++ 这个模板化代码是如何编译的?,c++,templates,C++,Templates,我很难理解它是如何编译的: template <class T, class U> struct A { ... }; struct B { template <class T> using C = A<T, B>; ... }; 模板 结构A{…}; 结构B{ 模板 使用C=A; ... }; 如何将“B”作为模板参数传递给“B”定义中的“a”-也就是说,“B”尚未完全定义 任何帮助都将不胜感激 干杯在您关心的那行,B被声明为“不完整类型”
template <class T, class U>
struct A { ... };
struct B {
template <class T>
using C = A<T, B>;
...
};
模板
结构A{…};
结构B{
模板
使用C=A;
...
};
如何将“B”作为模板参数传递给“B”定义中的“a”-也就是说,“B”尚未完全定义
任何帮助都将不胜感激
干杯在您关心的那行,
B
被声明为“不完整类型”。下面是一个简单的示例:
struct foo {
foo *p;
};
您还可以使用structfoo代码>。这并不能为编译器提供足够的信息,使您能够创建foo
或在另一个结构中存储foo
,但它确实允许您在知道foo
是类型名称的上下文中使用名称。例如:
#include <vector>
struct foo;
using foovector = std::vector<foo>; // Legal.
// foovector v(4); // Invalid.
在您关心的行中,B
被声明为“不完整类型”。下面是一个简单的示例:
struct foo {
foo *p;
};
您还可以使用structfoo代码>。这并不能为编译器提供足够的信息,使您能够创建foo
或在另一个结构中存储foo
,但它确实允许您在知道foo
是类型名称的上下文中使用名称。例如:
#include <vector>
struct foo;
using foovector = std::vector<foo>; // Legal.
// foovector v(4); // Invalid.
它是C++所明确允许的。B不需要完全定义,除非它在A
中用作值类型。不要发布无法编译的代码,然后告诉我们它已编译。在这些情况下,请提供一个。将省略号替换为/**/代码>并且你有一个MCVE或一些琐碎的东西。它是C++允许的。B不需要完全定义,除非它在A
中用作值类型。不要发布无法编译的代码,然后告诉我们它已编译。在这些情况下,请提供一个。将省略号替换为/**/代码>并且你有一个MCVE或者一些非常接近的东西。