这是我目前的尝试
template<typename T>struct type{ typedef std::vector<T> sometype; }template<typename TT>voID someFunction( type<TT>::sometype& myArg );
(注意,std :: vector< T>仅仅是一个例子).这不起作用,并给出编译器错误“voID someFunction’的模板声明”.我已经发现我需要在类型< TT>前面输入一个类型名称,即
template<typename TT>voID someFunction( typename type<TT>::sometype& myArg );
作品.但是这个解决方案 – 至少可以说 – 有点笨重.还有替代品吗?
解决方法 它不仅体积庞大,而且还可以防止模板参数扣除:std::vector<int> a;someFunction(a); // error,cannot deduce 'TT'someFunction<int>(a);
替代方案(在C 11中)是模板别名:
template<typename T>using sometype = std::vector<T>;template<typename T>voID someFunction(sometype<T> &myArg );std::vector<int> a;someFunction(a);
您也可以使用宏,但宏不是正确的答案.
#define sometype(T) std::vector<T>template<typename T>voID someFunction( sometype(T) &myArg);
另外,我认为你对sometype的定义在C11之前是无效的.它不应该有这个typename:
template<typename T>struct type{ typedef std::vector<T> sometype; };
我认为C 11改变了规则以允许它,但是一些C 03编译器未能正确诊断问题.
总结以上是内存溢出为你收集整理的C – 如何在函数声明中使用模板typedef变通方法?全部内容,希望文章能够帮你解决C – 如何在函数声明中使用模板typedef变通方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)