提问人:Constantinos Glynos 提问时间:1/23/2018 最后编辑:JustinConstantinos Glynos 更新时间:1/23/2018 访问量:1727
Forward Declaration at Class Template 专项化
forward declaration at class template specialisation
问:
在类模板专用化阶段,以下正向声明是否是合法的 C++ 代码?
template<typename>
struct Basic
{};
template<>
struct Basic<struct Foo> //<-- Fwd declaration?
{};
struct Foo
{
Basic<Foo> m_a;
};
int main()
{
Foo test;
}
它确实可以编译,但我不确定它是否合法
答:
4赞
DeiDei
1/23/2018
#1
是的,它是合法的 C++,并且它确实向前声明。struct Foo
您也可以在函数声明中执行此操作:
void fun(struct foo);
struct foo {};
void fun(struct foo) {}
或带有指针。
struct foo* pointer;
struct foo {};
基本上任何不需要完整类型的地方。(也适用于。class
7赞
R Sahu
1/23/2018
#2
template<>
struct Basic<struct Foo>
{};
是合法的。
从 C++11 标准:
类声明将类名引入到声明该类名的作用域中,并在封闭作用域中隐藏该名称的任何类、变量、函数或其他声明。
评论
0赞
Constantinos Glynos
1/23/2018
@R Sahu 谢谢!这就是我一直在寻找的!如果标准是这样说的,那对我来说已经足够了。
上一个:矢量与圆锥的交点
下一个:模板参数包如何具有其他尾随参数?
评论
x3::rule<class employee, ...>
)