4

我有几个模板设置结构,可以在这些结构中使用静态断言吗?

template<typename T, int N, (and so on...)>
struct Settings{
  static const int n = N;
  STATIC_ASSERT(n == 5);
  typedef typename T GAGA;
}

感谢您的回复!

4

3 回答 3

4

我不知道你的 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; 
};
于 2011-07-09T08:53:48.267 回答
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;
}
于 2011-07-09T11:56:34.040 回答
0
template<typename T, int N>
struct Settings
{  
STATIC_ASSERT(N == 5);  
typedef typename T GAGA;
};

我没有看到使用的正当理由n

于 2011-07-09T10:35:44.797 回答