我有两节课:

  • ValueRange
  • MenuItem

  • 第三类Menu使用MenuItem类定义几个菜单项,每个菜单项都具有一定范围的值(int,float,boolean)。

    我所做的是:
    template <class T>
    class ValueRange{
        private:
            T minValue;
            T maxValue;
        public:
            void setMinValue(T minValue){this->minValue=minValue;};
            void setMaxValue(T maxValue){this->maxValue=maxValue;};
            ValueRange(){};
            ~ValueRange(){};
    };
    


    #include <string>
    #include "ValueRange.hh"
    class MenuItem{
        private:
          std::string name;
          /*
           * does not compile...
           * error: invalid use of template-name 'ValueRange'
           * without an argument list
           * error: 'ValueRange' is not a type
           */
          ValueRange value;
        public:
          /*
           * does not compile...
           * error: 'class MenuItem' has no member named 'value'
           */
          void setValueRange(ValueRange value){this->value=value;}
          MenuItem(){};
          ~MenuItem(){};
    };
    

    我如何实现其属性值是通用的MenuItem类,以便可以使MenuItems的值范围为int,float,booleans等?

    最佳答案

    C++中的类模板需要实例化。例如:

    ValueRange<int>
    

    是有效类型。
    ValueRange
    

    没有类型的不是。

    为了实现通用的MenuItem,例如,您也可以使MenuItem成为模板化类,或者可以使ValueRange扩展非模板化基类,例如:
    class ValueRangeBase { /* some virtual members here... */ };
    
    template <class T>
    class ValueRange : public ValueRangeBase { /* same as before */ };
    

    然后,您可以将ValueRangeBase(虽然不是按值)用作通用ValueRange。有时这很有用,但可能并非完全符合您的要求。

    关于c++ - 级联C++模板用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17262040/

    10-13 09:00