我有几个模板设置结构,可以在这些结构中使用静态断言吗?
template<typename T, int N, (and so on...)>
struct Settings{
static const int n = N;
STATIC_ASSERT(n == 5);
typedef typename T GAGA;
}
Run Code Online (Sandbox Code Playgroud)
感谢您的回复!
我不知道你的 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;
};
Run Code Online (Sandbox Code Playgroud)
您必须查看STATIC_ASSERT宏定义才能了解到底发生了什么。STATIC_ASSERT可以使用的常见实现是:
#define STATIC_ASSERT( x ) \
typedef char static_assert_failed[ (x) ? 1 : -1 ]
Run Code Online (Sandbox Code Playgroud)
通常,要让行号成为 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2359 次 |
| 最近记录: |