پیاده سازی برای نوع خاصی از کلاس generic - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

پیاده سازی برای نوع خاصی از کلاس generic

+1 امتیاز

سلام به همگی.

template<typename T>
class Foo{
   public:
   Foo(T value1,T value2):value1_(value1),value2_(value2){}
   private:
   T value1_ ,value2_;
};

حالا قصد دارم اگر template از نوع int باشه با مقدار -50و50  به عنوان پیش فرض در سازنده قرار بگیره و اگر از نوع float بود -0.5 , 0.5 قرار بگیره چطور باید اینکار را انجام بدم؟

سوال شده آذر 20, 1393  بوسیله ی شاهین (امتیاز 114)   5 21 30

1 پاسخ

+1 امتیاز

یک کلاس برای مقادیر پیش فرض بسازید به این شکل : 

template<class T>
struct Defaults{};

template<>
struct Defaults<int>{
   static constexpr int value1=-50;
   static constexpr int value2=50;
};
template<>
struct Defaults<float>{
    static constexpr float value1=-0.5;
    static constexpr float value2=0.5;
};
//more specialized class...

و هر جا که خواستید ازش استفاده کنید برای نموه کلاس Foo :

template<class T>
class Foo{
public:
    Foo(T value1 = Defaults<T>::value1, T value2 = Defaults<T>::value2)
        : value1_(value1), value2_(value2){ }
    
    T value1_, value2_;
};

اجرای کد

پاسخ داده شده دی 26, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...