我有几个模板设置结构,可以在这些结构中使用静态断言吗?
template<typename T, int N, (and so on...)>
struct Settings{
static const int n = N;
STATIC_ASSERT(n == 5);
typedef typename T GAGA;
}
感谢您的回复!
我有几个模板设置结构,可以在这些结构中使用静态断言吗?
template<typename T, int N, (and so on...)>
struct Settings{
static const int n = N;
STATIC_ASSERT(n == 5);
typedef typename T GAGA;
}
感谢您的回复!
我不知道你的 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;
};
您必须查看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;
}
template<typename T, int N>
struct Settings
{
STATIC_ASSERT(N == 5);
typedef typename T GAGA;
};
我没有看到使用的正当理由n
。