2013-08-15 2 views
3

Прежде всего, вот мои примеры:C++ value_type параметра шаблона

SymmetricMatrix<std::vector<int>, int> a; 
SymmetrixMatrix<std::list<int>, int> b; 
SymmetricMatrix<std::deque<double>, double> c; 

SymmetricMatrix<std::vector<int> > d; 
SymmetricMatrix<std::vector<double> > e; 

Так есть два параметра шаблона. Если я напишу параметр по умолчанию для второго, я не должен называть его при создании объекта. Но как я могу настроить его на первый параметр? Например, если первый параметр равен std::vector<int>, второй должен быть int, если первый - std::vector<double>, второй должен быть double.

ответ

5
template<class DS, class T = typename DS::value_type> 
class SymmetricMatrix 
{ 
}; 

SymmetricMatrix<std::deque<double>> c; 

Предполагается, что DS (структура данных) содержит typedef value_type или не будет компилироваться. Вы можете заменить value_type тем, что хотите, до тех пор, пока оно находится в DS.

+2

Просто важно отметить, что 'DS' фактически должен определять' value_type', это не функция компилятора. – Mario

+0

@Mario хорошая точка –

+0

Я думаю, что должно существовать 'typename' перед' DS :: value_type'. – 0x499602D2

Смежные вопросы