gpt4 book ai didi

c++ - 具有多个参数的模板类特化,其中一个模板参数是模板本身

转载 作者:行者123 更新时间:2023-12-01 14:48:51 26 4
gpt4 key购买 nike

我认为最简单的方法是显示一些代码:

template<typename T>
struct TemplateTest { //<-- generic version
using typeGeneric = int;
};
template<>
struct TemplateTest<std::vector<int>> { //<-- specialized with specialized version of vector
using typeVectorInt = int;
};
template<typename T>
struct TemplateTest<std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};

int main (int argc, char** argv) {
typename TemplateTest<int>::typeGeneric var1;
typename TemplateTest<std::vector<int>>::typeVectorInt var2;
typename TemplateTest<std::vector<char>>::typeVectorT var3;
return 0;
}

这工作正常并且符合预期。由于我在不同的特化中使用了不同的使用名称,如果在编译期间选择了非预期的特化,则会出现编译错误。 (我这样做只是为了这篇文章来显示问题)

但是,这并没有按预期工作:
template<typename Tfirst, typename Tsecond>
struct TemplateTest { //<-- generic version
using typeGeneric = int;
};
template<typename Tfirst>
struct TemplateTest<Tfirst, std::vector<int>> { //<-- specialized with specialized version of vector
using typeVectorInt = int;
};
template<typename Tfirst>
template<typename T>
struct TemplateTest<Tfirst, std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};

int main (int argc, char** argv) {
typename TemplateTest<int, int>::typeGeneric var1;
typename TemplateTest<int, std::vector<int>>::typeVectorInt var2;
typename TemplateTest<int, std::vector<char>>::typeVectorT var3;
return 0;
}

var3 是问题所在。 vector 特化不起作用(不是由编译器选择的),我不知道为什么。这可以做到吗?如果可以,怎么做?

谢谢!

最佳答案

您在错误的语法中声明了第二个特化(带有无关的模板参数列表);将其更改为

template<typename Tfirst, typename T>
struct TemplateTest<Tfirst, std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};

关于c++ - 具有多个参数的模板类特化,其中一个模板参数是模板本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com