我有几个模板设置struct,可以在这些结构中使用静态断言吗?
template<typename T, int N, (and so on...)>
struct Settings{
static const int n = N;
STATIC_ASSERT(n == 5);
typedef typename T GAGA;
}
感谢您的回复!
答案 0 :(得分:3)
我不知道您的STATIC_ASSERT是什么,但如果您使用c ++ 11样式static_assert编写它,那么这很好用,看起来非常适合静态断言。 (好吧,也许不检查它是5但是检查模板参数适合于即时)
template<typename T, int N>
struct Settings {
static const int n = N;
static_assert(n == 5, "Error");
typedef typename T GAGA;
};
答案 1 :(得分:0)
template<typename T, int N>
struct Settings
{
STATIC_ASSERT(N == 5);
typedef typename T GAGA;
};
我没有看到使用n
的正确理由。
答案 2 :(得分:0)
您必须查看STATIC_ASSERT
宏定义才能看到究竟发生了什么。可以在其中使用的STATIC_ASSERT
的常见实现可以是:
#define STATIC_ASSERT( x ) \
typedef char static_assert_failed[ (x) ? 1 : -1 ]
通常有一些技巧可以让行号成为typedef的一部分,这样就可以在同一个上下文中使用多个STATIC_ASSERT
,但你可以看到这是允许的,因为它会扩展到结构定义中的有效代码:
template<typename T, int N, (and so on...)>
struct Settings{
static const int n = N;
typedef char static_assert_failed[ (n == 5) ? 1 : -1 ];
typedef typename T GAGA;
}