Re[2]: Реализация IN, IN-OUT и OUT параметров функций
От: Galiulin Rishat Faimovich Узбекистан  
Дата: 16.09.11 13:03
Оценка:
Здравствуйте, k.o., Вы писали:

KO>Здравствуйте, Galiulin Rishat Faimovich, Вы писали:


GRF>>Во многих языках есть поддержка со стороны языка IN, IN-OUT и OUT параметров, но в С++ такой нет вместо этого приходиться ипользовать константные и неконстантные ссылки и/или указатели. Поэтому я со своими коллегами решили что лучше было бы их раработать самим. В результате получилась такая реализация, но мы в ней не совсем уверены и хотели бы узнать мнение сообщества:


KO>Бессмысленный и беспощадный overdesign, который, к тому же, не всегда работает:


KO>
KO>class A
KO>{
KO>};

KO>void sink1(std::unique_ptr<const A> arg)
KO>{
KO>}

KO>void sink2(in<std::unique_ptr<const A>> arg)
KO>{
KO>}

KO>int main()
KO>{
KO>  std::unique_ptr<A> p1(new A);

KO>  sink1(std::move(p1)); // ok

KO>  std::unique_ptr<A> p2(new A);

KO>  sink2(in<std::unique_ptr<const A>>(std::move(p2))); // error
KO>}
KO>


В нашей нотации необходимо несколько изменить вызов и определение:
class A
{
};

void sink1( const std::unique_ptr< const A > arg)
{
}

void sink2( in< std::unique_ptr< const A >& > arg)
{
}

int main( int argc, char **argv )
{
  std::unique_ptr< A > p1( new A );
  sink1( std::move( p1 ) ); // ok

  std::unique_ptr< A > p2( new A );
  sink2( in< std::unique_ptr< const A >& >( std::move( p2 ) ) ); // ok

  return 0;
}


KO>и не всегда применим:


KO>
KO>MyType z = in<MyType&>(in<MyType&>(a) + in<MyType&>(in<MyType&>(b) * in<MyType&>(c)));
KO>


KO>во что это превратится с использованием expression templates я даже думать не хочу, впрочем, как я понял, некоторым такой вариант кажется более читабельным по сравнению с


KO>
KO>MyType z = a + b * c;
KO>


Мы и не планировали что in, in_out и out будут так применяться .
Посмотрите, пожалуйста, примеры использования в самом первом сообщении .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.