Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
template<double const* d> class some { /*...*/ };
extern double const d(22.0/7);
some<&d> s;
Здравствуйте, MaximE, Вы писали:
ME>_nn_ wrote:
ME>[]
>> Буду рад комментариям.
ME>Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
ME>
ME>template<double const* d> class some { /*...*/ };
ME>extern double const d(22.0/7);
ME>some<&d> s;
ME>
ME>-- ME>Maxim Yegorushkin
Ну скажем для такого случая
template<typename T, typename TMin, typename TMax, typename TLess=std::less<T> >
class limit_t
{
T t;
public:
limit_t() : T(TMin::value) {}
limit_t& operator=(const limit_t& r)
{ set_data(r.t); return *this; }
void set_data(const T& set_value)
{
if(TLess(set_value,TMin::value))
throw std::out_of_range("value is less than minimum");
if(TLess(TMax::value,set_value)
throw std::out_of_range("value is more than maximum");
t=r.t;
return *this;
}
};
template<typename T, T t>
struct integral_value_wrapper
{ static const T value = t; };
// nonintegral_value_wrapper
// ...class some_class
{
public:
limit_t<
int,
integral_value_wrapper<int,10>,
integral_value_wrapper<int,20>
>limit_int_10_to_20;
limit_t<
double,
nonintegral_value_wrapper<double,10,1,1,1>,
nonintegral_value_wrapper<double,20,1,1,1>
>limit_double_10_1_to_20_1;
};
Выглядит немного некрасиво, но позволяет не создавать дополнительных переменных.
Здравствуйте, MaximE, Вы писали:
ME>_nn_ wrote:
ME>[]
>> Буду рад комментариям.
ME>Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
ME>
ME>template<double const* d> class some { /*...*/ };
ME>extern double const d(22.0/7);
ME>some<&d> s;
ME>
ME>-- ME>Maxim Yegorushkin
Ну так все таки, как же запараметризировать шаблон вещественным числом, пример может быть самый простой, например как сконструировать auto_value<float>
Здравствуйте, Batiskaf, Вы писали:
B>Здравствуйте, MaximE, Вы писали:
ME>>_nn_ wrote:
ME>>[]
>>> Буду рад комментариям.
ME>>Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
ME>>
ME>>template<double const* d> class some { /*...*/ };
ME>>extern double const d(22.0/7);
ME>>some<&d> s;
ME>>
ME>>-- ME>>Maxim Yegorushkin
B>Ну так все таки, как же запараметризировать шаблон вещественным числом, пример может быть самый простой, например как сконструировать auto_value<float>
, все таки вещественные поля класса так же как и интегральные не инициализируются автоматически.
Напрямую на текущий момент никак, только в обход.
Можно вместо числа передавать класс, где будет это число в виде статической перемменной.
Можно использовать указатель на глобальную переменную, но надо для каждого значения создавать глобальную переменную.
А все же чем не нравится через класс ?
template<typename T, typename TInit>
class auto_value_t {...};
template<typename T, T t_init>
class auto_value : public auto_value_t<T,value_wrapper<t_init> > {...};
auto_value<int,10> int_10;
auto_value_t<int,value_wrapper<10> > int_wrapper_10;
auto_value_t<double, value_wrapper<double,22,1,7,1> > double_wrapper_22_7;
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Batiskaf, Вы писали:
B>>Здравствуйте, MaximE, Вы писали:
ME>>>_nn_ wrote:
ME>>>[]
>>>> Буду рад комментариям.
ME>>>Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
ME>>>
ME>>>template<double const* d> class some { /*...*/ };
ME>>>extern double const d(22.0/7);
ME>>>some<&d> s;
ME>>>
ME>>>-- ME>>>Maxim Yegorushkin
B>>Ну так все таки, как же запараметризировать шаблон вещественным числом, пример может быть самый простой, например как сконструировать auto_value<float>
, все таки вещественные поля класса так же как и интегральные не инициализируются автоматически.
__>Напрямую на текущий момент никак, только в обход. __>Можно вместо числа передавать класс, где будет это число в виде статической перемменной. __>Можно использовать указатель на глобальную переменную, но надо для каждого значения создавать глобальную переменную.
__>А все же чем не нравится через класс ? __>
Здравствуйте, Batiskaf, Вы писали:
B>Здравствуйте, _nn_, Вы писали:
__>>Здравствуйте, Batiskaf, Вы писали:
B>>>Здравствуйте, MaximE, Вы писали:
ME>>>>_nn_ wrote:
ME>>>>[]
>>>>> Буду рад комментариям.
ME>>>>Мне ни разу не приходилось использовать вещественные числа в качестве параметров шаблона и я не могу придумать для этого применения. Было бы интересно увидеть, что позволяет твоя штука, и чем она лучше чем:
ME>>>>
ME>>>>template<double const* d> class some { /*...*/ };
ME>>>>extern double const d(22.0/7);
ME>>>>some<&d> s;
ME>>>>
ME>>>>-- ME>>>>Maxim Yegorushkin
B>>>Ну так все таки, как же запараметризировать шаблон вещественным числом, пример может быть самый простой, например как сконструировать auto_value<float>
, все таки вещественные поля класса так же как и интегральные не инициализируются автоматически.
__>>Напрямую на текущий момент никак, только в обход. __>>Можно вместо числа передавать класс, где будет это число в виде статической перемменной. __>>Можно использовать указатель на глобальную переменную, но надо для каждого значения создавать глобальную переменную.
__>>А все же чем не нравится через класс ? __>>
value_wrapper у это как бы выбор автоматический между nonintergal_value_wrapper и integral_value_wrapper
// nonintegral_value_wrapper - из предыдущего постаtemplate<typename T,
bool t_bminus
size_t t_n1,
int t_pow1,
size_t t_n2,
int t_pow2,
>
struct nonintegral_value_wrapper
{...};
template<typename T, T t_value>
struct integral_value
{ static T value = t_value; };
B>мы же как раз пытаемся избежать передачи вещественных значений через аргументы шаблона.
Как раз в auto_value мы пытается и передать значения в шаблоне.
Ведь класс и создался чтобы не писать такое: