首先,这是我的例子:
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;
Run Code Online (Sandbox Code Playgroud)
所以有两个模板参数.如果我为第二个写一个默认参数,我不必在创建对象时命名它.但是如何将其调整为第一个参数?例如,如果第一个参数是std::vector<int>
,第二个应该是int
,如果第一个是std::vector<double>
,第二个应double
.
template<class DS, class T = typename DS::value_type>
class SymmetricMatrix
{
};
SymmetricMatrix<std::deque<double>> c;
Run Code Online (Sandbox Code Playgroud)
假设DS(数据结构)包含typedef value_type,或者它不会编译.您可以将value_type替换为您想要的任何内容,只要它在DS中即可.