параметр по умолчанию - член класса
От: Чили Россия  
Дата: 06.09.07 11:10
Оценка:
Hi
Хотелось реализовать функцию find() следущюим образом:
class myclass 
{
      bool find(const Type &val, int first = 0, int last = _size);
      ....
      int  _size;
};

Но компилятор ругается:
error C2648: 'myclass<Type>::_size' : use of member as default parameter requires static member
Я не могу делать static _size !!!
Как решить эту проблему что-то не соображу.
Re: параметр по умолчанию - член класса
От: Erop Россия  
Дата: 06.09.07 11:13
Оценка: 1 (1) +1
Здравствуйте, Чили, Вы писали:

Ч>Как решить эту проблему что-то не соображу.

Так попробуй:

class myclass 
{
      bool find(const Type &val, int first = 0, int last );
      bool find(const Type &val, int first = 0, ) { return find( val, first, _size );
      ....
      int  _size;
};
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: параметр по умолчанию - член класса
От: Анатолий Широков СССР  
Дата: 06.09.07 11:14
Оценка: -1 :))
Ч>Как решить эту проблему что-то не соображу.

Используй фиктивный элемент

bool find(const Type &val, int first = 0, int last = -1)
{
   if( last == -1 ) 
       last = _size;
   ...
}
Re[2]: параметр по умолчанию - член класса
От: Чили Россия  
Дата: 06.09.07 13:16
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Чили, Вы писали:


Ч>>Как решить эту проблему что-то не соображу.

E>Так попробуй:

E>
class myclass 
E>{
E>      bool find(const Type &val, int first = 0, int last );
//Эта фишка не прокатит: missing default parameter for parameter 3
E>      bool find(const Type &val, int first = 0, ) { return find( val, first, _size );
E>      ....
E>      int  _size;
E>};
Re[3]: параметр по умолчанию - член класса
От: Аноним  
Дата: 06.09.07 13:36
Оценка:
Здравствуйте, Чили, Вы писали:

E>>
class myclass 
E>>{
E>>      bool find(const Type &val, int first /*= 0 не нужны тут дефолтные параметры!*/, int last );
Ч>//Эта фишка не прокатит: missing default parameter for parameter 3
// А подумать?!
E>>      bool find(const Type &val, int first = 0/*а тут пусть будут*/ ) { return find( val, first, _size );
E>>      ....
E>>      int  _size;
E>>};
Re[4]: параметр по умолчанию - член класса
От: Чили Россия  
Дата: 06.09.07 14:06
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Чили, Вы писали:


E>>>
class myclass 
E>>>{
E>>>      bool find(const Type &val, int first /*= 0 не нужны тут дефолтные параметры!*/, int last );
Ч>>//Эта фишка не прокатит: missing default parameter for parameter 3
А>// А подумать?!
E>>>      bool find(const Type &val, int first = 0/*а тут пусть будут*/ ) { return find( val, first, _size );
E>>>      ....
E>>>      int  _size;
E>>>};

Велик и могуч язык C++ !!!
Re: параметр по умолчанию - член класса
От: MasterZiv СССР  
Дата: 07.09.07 06:31
Оценка: +2
Чили пишет:
> Хотелось реализовать функцию find() следущюим образом:
>
> class myclass
> {
> bool find(const Type &val, int first = 0, int last = _size);
> ....
> int _size;
> };

Такие финты надо делать через перегрузку.


// find it with the internal size
inline bool myclass::find(const Type &val, int first = 0)
{
return find(val, first, this->_size);
}

// find it with explicitly specified size
bool myclass::find(const Type &val, int first, int last)
{
....
}
Posted via RSDN NNTP Server 2.1 beta
Re[2]: параметр по умолчанию - член класса
От: MasterZiv СССР  
Дата: 07.09.07 06:38
Оценка:
Анатолий Широков пишет:

> Используй фиктивный элемент

>
> bool find(const Type &val, int first = 0, int last = -1)
> {
> if( last == -1 )
> last = _size;
> ...
> }

Фу, фу, фу, Анатолий, мне стыдно это слышать от вас !
Нет, не верю что вы могли такое посоветовать ...



Шучу конечно, хотел и сам такое посоветовать, но
с перегрузкой лучше. Только там придется перегружать поболе,
если, как и в этом случае, предыдущие параметры тоже имеют
умолчания. Трюк с фиктивным значением конечно позволяет
этого избежать — 5-7 перегруженных функций уже не будет.
Но использовать какие-то предопределенные невалидные значения —
плохо.

Надо вообще сказать, что по подразумеваемой семантике
(хотя она от нас и скрыта) видимо типы first & last должны
быть size_t, или итераторы. А там unsigned int last = (unsigned int)-1
уже невозможно. Но надо признать, что даже в STL такие трюки
применяются, что же требовать от нас, простых смертных ...
Posted via RSDN NNTP Server 2.1 beta
Re[3]: параметр по умолчанию - член класса
От: Анатолий Широков СССР  
Дата: 07.09.07 10:18
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Анатолий Широков пишет:


>> Используй фиктивный элемент

>>
>> bool find(const Type &val, int first = 0, int last = -1)
>> {
>> if( last == -1 )
>> last = _size;
>> ...
>> }

MZ>Фу, фу, фу, Анатолий, мне стыдно это слышать от вас !

MZ>Нет, не верю что вы могли такое посоветовать ...
MZ>

Ильюха, с каких это пор мы на вы? Что касается, собственно, вопроса. Да, вроде, ничего смешного и, тем более, постыдного я не посоветовал. В данному случае, согласен, перегрузка уместнее, но фиктивные значения тоже имеет право на существование. Например, в std::string сигнатуры изобилуют std::basic_string<>::npos в качестве дефолтного значения и во многих других частях STL.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.