Этюд: значения по умолчанию
От: Кодт Россия  
Дата: 27.10.09 08:26
Оценка: +1
Здравствуйте, Kir., Вы писали:

K>Подскажите, какой компилятор сможет съесть вот такое:


Предлагаю этюд для С++гуру: сделать библиотечное решение данной проблемы.

Для целочисленных — легко
enum placeholder { _ };
// то, что он ещё и равен 0, - дополнительная фича (где-то полезная, где-то вредная)

template<class T, T V = T()> struct value
{
    T v;
    value() : v(V) {}
    value(placeholder) : v(V) {}
    template<class U> value(U u) : v(u) {}
    
    T get() const { return v; }
    operator T() const { return v; }
};

void foo(value<char,'c'> x, value<int,7> y, value<unsigned,9> z)
{
    cout << x.get() << " " << y.get() << " " << z.get() << endl;
}

int main()
{
    foo('a' , _ ,  _ );
    foo( _  , 2 ,  _ );
    foo( _  , _ , -3 );
}

( http://codepad.org/i2KUUWrc )

Как обобщить на произвольные типы? И как подсовывать по дефолту значения времени исполнения?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>

28.10.09 14:23: Ветка выделена из темы Значения по умолчанию.
Автор: Kir.
Дата: 27.10.09
— Кодт
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.