gpt4 book ai didi

c++ - 静态断言实例化时模板类型的大小

转载 作者:可可西里 更新时间:2023-11-01 18:39:55 27 4
gpt4 key购买 nike

我想在实例化时用 static_assert 检查以下结构的大小约束未命名的 struct是紧密包装的,因此大小为 A相当于sizeof(T) * 3 .

template <typename T>
struct A
{
union
{
struct { T a, b, c; };
T arr[3];
};
};

这可以用

static_assert(sizeof(A<T>) == sizeof(T) * 3, "hey something went wrong");

但是

  • A<T>在其类定义中仍然是一个不完整的类型,把上面的 static_assert进入类定义不是一个选项

  • static_assertsizeof不会在所有编译器(如 Clang)中评估未实例化的函数内部,因此将它放入虚拟成员函数中不是一个选项

  • 投入 static_assert到构造函数或析构函数将是一个解决方案,但在上面的示例中不存在用户定义的构造函数(考虑聚合),进一步想象多个构造函数的情况,我将避免在其中执行断言所有这些

  • 继承 A来自另一个结构,并执行 static_assert关于 A 的定义将是一个解决方案,但我想保持结构简单,而不会弄乱辅助结构

我还缺少其他解决方案吗?

我决定取消删除这个问题,并保留它以供将来可能的解决方案使用。

最佳答案

一个(几乎)保证被实例化的特殊成员函数是析构函数:

~A() noexcept { static_assert(sizeof(A<T>) == sizeof(T) * 3, "hey something went wrong"); }

关于c++ - 静态断言实例化时模板类型的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com