3

適切なヘッダーが含まれていると仮定します。

電卓のさまざまな機能のクラスがあります。さまざまな演算子タイプ (nullary、Unirary、Binary、Ternary) の構造体がいくつかあります。電卓がサポートする要素が埋められた構造体のベクトル (またはできれば配列) を初期化したいと考えています。たとえば、nul[]={{pi, "pi"}, {ans, "ans"}};私のプログラムは入力からトークンを取得し、適切な演算子を検索し、その演算子のインデックスを返し、適切な関数ポインターを呼び出します。私の問題は、コンストラクターで配列またはベクトルを初期化することです。誰かが私に両方の方法を教えてくれれば幸いです。ありがとうございました。以下は私のクラスと未完成のコンストラクターです。また、電卓を書くためのより良い方法を考えられるなら、ぜひ聞いてみたいです。

//operator class
class Functions{
    public:
        Functions();
        double pi(double x=0);
        double answer(double& x);
        double abs(double& x);
        double pow(double& x);
        double add(double& x, double &y) const;
        double subtract(double& x, double& y) const;
        double multiply(double& x, double& y)const;
        double divide(double& x, double& y) const;
        double max(double& x, double& y, double& z) const;
        double volume(double& x, double& y, double& z) const;
        void doc();
        bool weird(double &x) const;
        unsigned findop0(const string & name);
        unsigned findop1(const string & name);
        unsigned findop2(const string & name);
        unsigned findop3(const string & name);
    private:
        struct Nul{
            double (*nulf)(double & x);
            string name;
        };
        struct Uni{
            bool (*unif)( double & result, double x );
            string name;
        };
        struct Bin{
            bool (*binf)( double & result, double x, double y );
            string name;
        };
        struct Tern{
            bool (*terf)( double & result, double x, double y, double z );
            string name;
        };
        static const unsigned NUL_ELEMENTS = 2;
        static const unsigned UNI_ELEMENTS = 2;
        static const unsigned BIN_ELEMENTS = 4;
        static const unsigned TRI_ELEMENTS = 2;
        vector<Nul> nul;
        vector<Uni> uni;
        vector<Bin> bin;
        vector<Tern> tri;
};

Functions::Functions(){
    nul
}
4

1 に答える 1

3

C++11 では、初期化リストの 1 行でこれを行うことができます。

struct C {
  int a[20];
  int* b;
  std::vector<int> c;
  std::array<int,20> d;
  C() : 
     a({1,2,3}), 
     b(new int[20]{1,2,3}), 
     c({1,2,3}), 
     d(std::array<int, 20u>{1,2,3}) 
  {}
};

C++03 では、複数行の割り当てを使用するか、静的関数を作成して、ベクトルまたは生の配列を初期化します。

struct C {
  int a[20];
  int* b;
  std::vector<int> c;
  C() : 
     b(new int[20]), 
  {
     a[0] = 1; ...
     b[0] = 1;
     c.push_back(1);
  }
};
于 2012-10-11T21:10:25.697 に答える