下面的代码是什么我想在一个大的项目做一个例子函数模板:与类模板的typedef参数
#include <iostream>
#include <vector>
// standard template typedef workaround
template<typename T> struct myvar {typedef std::vector<T> Type;};
template<typename T>
T max(typename myvar<T>::Type& x)
// T max(std::vector<T>& x)
{
T y;
y=*x.begin();
for(typename myvar<T>::Type::iterator it=x.begin(); it!=x.end(); ++it)
if(*it>y)
y=*it;
return y;
}
int main(int argc, char **argv)
{
myvar<int>::Type var(3);
var[0]=3;
var[1]=2;
var[2]=4;
std::cout << max(var) << std::endl;
return 0;
}
当我尝试编译它,我得到:
>g++ delme.cpp -o delme
delme.cpp: In function ‘int main(int, char**)’:
delme.cpp:25: error: no matching function for call to ‘max(std::vector<int, std::allocator<int> >&)’
但是,如果我注释掉线8并取消线9得当编译并给出:
>g++ delme.cpp -o delme
>./delme
4
可有人请解释为什么使用typename myvar<T>::Type&
的max()的函数模板定义不被视为与‘max(std::vector<int, std::allocator<int> >&)’
匹配,并且有没有办法让它匹配而不使用底层的std::vector<T>&
类型?
我明白了,谢谢。 的原因'myvar'模板是使用的uBLAS column_major基质,而不需要用户始终指定这一点,即 命名空间海布 { 模板 结构矩阵{ 的typedef提高::数字:: uBLAS库: :矩阵类型; }; } 然后,我希望我的函数具有'Cheb :: matrix :: type'类型的参数。我没有太多的模板化函数,所以我可以在明确指定模板参数的情况下生存下来,但不需要。 –
2010-06-21 18:13:52
如果Max()被调用的地方也是一个模板,该模板的参数是否可以作为模板参数传递给Max() - 是否可以解析类型? – fusi 2015-06-22 00:39:22