我想用c++17自动推断一个类‘(带有默认的模板参数)。有人知道这是否可能吗?以下代码试图说明这一点:
#include <vector>
template <typename T = int>
struct A{
using Vec = std::vector<T>;
};
int main() {
A a{}; // works with c++ 17
A<int>::Vec vec2{}; //works
A::Vec vec{}; //does not seem to work with c++ 17. Is that possible somehow?
}在上面的代码中,a是在没有问题的情况下实例化的,推导出的模板类型在默认情况下是int。尽管如此,我必须传递参数类型才能使用typedef Vec。如果有人知道以下两个问题的答案,我将不胜感激:
A a{}自动类型扣减?我很想了解更多关于这个特性的信息。Vec的模板类型而自动推断A的类型吗?我很感谢你的暗示和建议!
发布于 2021-06-07 11:00:07
是否可以在不显式指定模板类型的情况下自动推断Vec的类型?
是。您可以将<>保留为空:
A<>::Vec vec{};否则,没有A或<>或<int>等的模板将命名为具有未知模板类型参数的模板,您不能使用该参数访问嵌套标识符。
ISO邮件列表的纸张编号/标题是什么?允许a{}自动类型扣减?我很想了解更多关于这个特性的信息。
P1814是关于类模板参数推导(CTAD)的主要论文。这里是cpprefernece上的页面。请注意,A<>::Vec vec{}不依赖CTAD,因为不涉及执行实际演绎的构造函数。
发布于 2021-06-07 10:59:43
是否可以在不显式指定模板类型的情况下自动推断Vec的类型?
是:
A<>::Vechttps://stackoverflow.com/questions/67870327
复制相似问题