【发布时间】:2014-06-01 12:18:04
【问题描述】:
以下看起来像是编译错误:
struct : Base { };
然而,当used [1] 它似乎工作:
#include <iostream>
using namespace std;
template<bool B>
struct A
{
struct : std::integral_constant<bool, B> {
} members;
};
int main()
{
A<true> a;
cout << a.members.value << endl;
return 0;
}
在 C++ 中,未命名的结构可以继承吗?有什么有用的例子吗?
[1] 免责声明:我并没有假装提供的示例很有用。我很少使用未命名的结构,当我这样做时,它们通常会捆绑一些内置的成员变量,以便为类提供更清晰的接口。问题来自memberspaces不需要命名结构的观察
【问题讨论】:
-
第二个例子是有效的。它的用途?尚未确定。
-
@StoryTeller: ideone.com/CWXUkv
-
@lorro 哇,很复古。巧妙的技巧,但
std::tie是 IMO 更好的方法。 -
@StoryTeller:我不太喜欢 std::tie,因为它要求您首先构造一个可能无效的对象。如果它是资源怎么办,如果我们没有默认构造函数怎么办,如果构建需要时间/分配怎么办?换句话说,我希望有一天我们可以在任何地方声明变量,包括在 std::tie 内部(或 make tie)。不会比里面的 for / if / while... 更糟了……
-
@lorro, Rejoice,这似乎已经变成了 C++17 open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf
标签: c++ inheritance struct unnamed-class