【发布时间】:2017-06-20 17:13:57
【问题描述】:
我需要确保模板结构与其成员的大小完全相同。 static_assert 似乎是这里的首选工具。但是,我不能在结构本身内部使用static_assert,因为那里的大小还不知道。这是我想要的:
template<typename T1,typename T2>
struct foo {
T1 v1;
T2 v2;
// Doesn't compile, invalid application of sizeof to incomplete type
static_assert(sizeof(foo<T1,T2>)==sizeof(T1)+sizeof(T2),"Struct size invalid");
};
这不起作用。那么该怎么做呢?我不想让实例化模板的人在每次实例化中检查自己的负担。每当实例化结构时,检查应该是全自动的。
【问题讨论】:
-
为什么不把
static_assert声明例如进入构造函数? -
@πάνταῥεῖi 如果结构应该是 POD 类型,但它不能是默认构造函数。并且需要添加一个
default默认构造函数。
标签: c++ templates sizeof static-assert