1

以下の問題の解決策を提供するように依頼されました。

いくつかの int パラメーターを定義する構造体があります。

struct B {
  int a;
  int b;
};

この構造体を他のクラスの const static メンバーとして定義したい場合があります(これだけでなくclass A、同じ定数セットを持つことが期待される他のクラスがあります)

そして、それらを実際の整数定数として使用したいと考えていました:

// .h file
class A {
public:
  static const B c; // cannot initialize here - this is not integral constant
};
// .cpp file
const B A::c = {1,2};

ただし、この定数を使用して、たとえば配列を作成することはできません。

float a[A::c.a];

何かアドバイス?

4

2 に答える 2

2

A::c constexprインラインで初期化し、そのメンバーを定数として使用することができます。

struct A {
    static constexpr B c = {1, 2};
};

float a[A::c.a];
于 2012-10-18T12:16:04.007 に答える
1

私が見つけた解決策は、を const メンバーに変更するstructことです。template struct

template <int AV, int BV>
struct B {
  static const int a = AV;
  static const int b = BV;
};
template <int AV, int BV>
const int B<AV,BV>::a;
template <int AV, int BV>
const int B<AV,BV>::b;

そして使用法:

// .h file
class A {
public:
  typedef B<1,2> c; 
};

そして配列:

float a[A::c::a]; 
//          ^^ - previously was . (dot)
于 2012-10-18T12:10:28.027 に答える