大佬教程收集整理的这篇文章主要介绍了c – 模板参数的模糊模板重载是一个容器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <String> #include <vector> using std::string; using std::vector; template <typename T> const T GetValue() { return T(); // some value } template <typename T> const vector<T> GetValue() { return vector<T>(); // some vector of values } int main(int argc,char* argv[]) { int i = GetValue<int>(); vector<int> = GetValue<vector<int>>(); return 0; }
我有两个模板函数,它们应该根据给定的类型解析某些存储中的值.第一个应该完成简单数据类型的工作,第二个应该只用于简单数据类型的向量.
我的问题是模板匹配是模糊的,因为T可能是向量< T>.
我想知道如何正确地实现向量类型的重载/特化.
任何帮助将不胜感激!
#include <vector> using std::vector; template <typename T> void GetValue(T &t) { t = T(); // some value } template <typename T> void GetValue(vector<T> &v) { v = vector<T>(); // some vector of values } int main(int argc,char* argv[]) { int i; GetValue(i); vector<int> v; GetValue(v); return 0; }
GetValue(v)不含糊,因为模板参数推导规则说第二次重载是更好的匹配.
这不一定是您想要的界面/样式,但在这种情况下,您可以使用部分特化而不是重载.但这需要一个类,因为函数模板不能部分专门化:
#include <vector> using std::vector; template <typename T> struct Getter { T get(void) { return T(); // some value } }; template <typename T> struct Getter<vector<T> > { vector<T> get(void) { return vector<T>(); // some vector of values } }; template <typename T> T GetValue(void) { return Getter<T>().get(); } int main(int argc,char* argv[]) { int i = GetValue<int>(); vector<int> v = GetValue<vector<int> >(); return 0; }
以上是大佬教程为你收集整理的c – 模板参数的模糊模板重载是一个容器全部内容,希望文章能够帮你解决c – 模板参数的模糊模板重载是一个容器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。