C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 模板类的模板功能专业化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
可以在C 11/14中写这样的东西吗?
#include <iostream>
#include <vector>

template <typename T>
T Get();

template <typename T>
struct Data {
    std::vector<T> data;
};

template <>
template <typename T>
Data<T> Get<Data<T>>() {
    return Data<T>{{T{},T{}}};
}

template <>
template <typename T>
std::vector<T> Get<std::vector<T>>() {
    return std::vector<T>(3);
}

int main() {
    std::cout << Get<Data<int>>().data.size() << std::endl;  // expected output is 2
    std::cout << Get<std::vector<int>>().size() << std::endl; // expected output is 3
    return 0;
}

在这种情况下,重载不会有帮助,因为Get< ...>())的调用将变得模糊(see):

template <typename T>
Data<T> Get() {
    return Data<T>{{T{},T{}}};
}

template <typename T>
std::vector<T> Get() {
    return std::vector<T>(3);
}

欢迎任何有关如何克服这个问题的方向.

解决方法

@H_616_13@ 正如columbo在他的评论中所提到的那样,您应该采用标准的解决方法,因为缺少对功能的部分专业化支持:委派给部分专业的类:
template <typename T>
struct GetImpl;

template <typename T>
T Get() { return GetImpl<T>::Do(); }

并且现在在struct GetImpl< T>上使用部分专业化{static T Do(); }而不是Get< T>()

大佬总结

以上是大佬教程为你收集整理的c – 模板类的模板功能专业化全部内容,希望文章能够帮你解决c – 模板类的模板功能专业化所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。