gpt4 book ai didi

c++ - C++17 中的部分类模板参数推导

转载 作者:太空狗 更新时间:2023-10-29 23:48:33 25 4
gpt4 key购买 nike

在下面的示例中,我们使用 C++17 功能“类模板参数推导”来推导 val类型为 Base<int, double, bool> :

template<class T, class U, class V>
struct Base {
Base(T, U) { };
Base(T, U, V) { };
Base(V) { };
};

void func() {
Base val(1, 4., false);
}

现在,是否可以部分指定模板参数,并推导其余部分?实际上这样的东西:

Base<V = bool> val1(1, 4.);        // U & V deduced --> Base<int, double, bool>
Base<T = bool, T = int> val2(5.); // V deduced --> Base<bool, int, double>

我试过了,例如

template<class T, class U> using Base2 = Base<T, U, double>;

void func() {
NewBase2 val(1, 2);
}

但它无法编译:'Base2': use of alias template requires template argument list .

是否有可能以某种方式进行部分扣除?如果不能直接使用,是否有任何好的解决方法?

最佳答案

CTAD(类模板参数推导)目前是一个全有或全无的过程。您要么不指定任何内容并允许编译器推导所有参数,要么指定所有参数使编译器退出循环。

有一篇论文 ( P1021R0 ) 提出了这个要求和更多要求,但尚未被接受。 有一篇论文要求部分特化,但在修改后已被删除。 The newest revision仍然包括在使用别名时具有 CTAD 功能的建议。


每@Barry对别名模板 (P1814) 和聚合 (P1816) 的支持已添加到 C++20 的工作草案中。不添加对部分 CTAD 或具有继承构造函数的 CTAD 的支持。

关于c++ - C++17 中的部分类模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57563594/

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