Re[5]: typedef внутри шаблона
От: jazzer Россия Skype: enerjazzer
Дата: 16.02.11 00:37
Оценка:
Здравствуйте, al.zatv, Вы писали:

AZ>Мне надо функцию описать

AZ>template <class Graph>
AZ>void fn(Graph &g, typename Graph::vertex_descriptor d1,typename Graph::vertex_descriptor d1, typename Graph::edge_descriptor e1,Graph::edge_descriptor e2)
AZ>{
AZ> и внутри постоянно использую vertex_descriptor
AZ>}



AZ>Очень длинно, почти нечитабельно.

А ты в столбик напиши, и сразу станет читабельно
template <class Graph>
void fn( Graph &g
       , typename Graph::vertex_descriptor d1
       , typename Graph::vertex_descriptor d2
       , typename Graph::edge_descriptor e1
       , typename Graph::edge_descriptor e2 )
{
  //и внутри постоянно использую vertex_descriptor
}


Это — самое простое и очевидное решение твоей надуманной (как мне кажется) проблемы.
Если так уж хочется иметь короткий список параметров и тебе не нужна перегрузка по этим параметрам (т.е. у тебя всего одна функция), то можно так:
template <class Graph, class Vertex, class Edge>
void fn( Graph &g, Vertex d1, Vertex d2, Edge e1, Edge e2 )
{
  BOOST_STATIC_ASSERT(( boost::is_same< Vertex, typename Graph::vertex_descriptor>::value ));
  BOOST_STATIC_ASSERT(( boost::is_same< Edge, typename Graph::edge_descriptor>::value ));
  //и внутри постоянно использую Vertex 
}

Но лично мне решение в столбик нравится больше — оно проще и очевиднее.

ЗЫ И пользуйся кодами разметки, плиз.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.