Re[4]: Cpp-Object
От: _nn_  
Дата: 19.05.06 06:51
Оценка: -1
Здравствуйте, Garrrrr, Вы писали:

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


__>>Зачем нужно писать & и * если можно без них.

G>Можно. Смарт-пойнтеры и фабрики в помощь.
Без ссылок там все равно не обойтись.
__>>Почему нельзя определить семантику передачи аргументов ?
G>Гм... ее из сигнатуры функции почти всегда видно. Разве нет? отрабатывайте стиль.
void f(int& i);
Это out или in-out аргумент ?
Без документации нельзя узнать.
__>>Почему нужно делать разного рода извращения, чтобы работать с примитивными типами ?
G>Ну у каждого свои склонности. Кто то только через извращения проблемы решать может.
А как вы решаете эти проблемы:
template<typename T>
size_t f(T const& t)
{
 return t.size();
}

f(1); // не работает.

Обход:
template<bool primitive>
struct f_impl
{
 template<typename T>
 static void f(T const& t)
 {
  return sizeof(t);
 }
};

template<>
struct f_impl<false>
{
 template<typename T>
 static void f(T const& t)
 {
  return t.size();
 }
};

template<typename T>
size_t f(T const& t)
{
 return f_impl<is_primitive<T>::value>::f(t);

f(1); // теперь работает

А можно ведь было:
size_t f(object& t)
{
 return t.size();
}

__>>Почему нельзя написать код так, чтобы он работал для всего ?
G>Угу, в отдельно взятых 2 тысячах строк кода. Для того, чтобы ваш подход работал для всех, он должен стать стандартом. А предпосылок для этого в мотивации как то маловато. Скажу более — эта библиотека будет даже вредна для неокрепших умов.
А мне кажется наоборот.
Намного проще знать, что все типы это классы, чем вспоминать, что иногда есть примитвные типы, которые нужно передавать по значению, а не по ссылке.
__>>Из-за того, что небыло представленно решение этих и других проблем придумали обходные решения, вместо того, чтобы решить саму проблему.
G>Полноте... я вот о такой проблеме до вчерашнего вечера и не подозревал. В чем проблема то?
Смотрите выше.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.