C – 如何在函数声明中使用模板typedef变通方法?

C – 如何在函数声明中使用模板typedef变通方法?,第1张

概述我想在各种地方使用模板化的typedef,以及其自身模板化函数声明. 这是我目前的尝试 template<typename T>struct type{ typedef std::vector<T> sometype; }template<typename TT>void someFunction( type<TT>::sometype& myArg ); (注意,std :: vect 我想在各种地方使用模板化的typedef,以及其自身模板化函数的声明.
这是我目前的尝试
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变通方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存