1

假设我们有一个依赖于两种模板类型的类,其中一种是我们专门研究构造函数,我们可以不专门研究可推导类型吗?

template <typename T, typename I>
class A {
public:
    A(I i) {

    }
};

int main() {
    A<float, int> a(42); // this works, but we can deduce int from 42

    A<float> aa(42); // doesn't work
    //or
    auto aaa = A<float>(42); // doesn't work
}
4

1 回答 1

2

在 C++20 中,您可以像这样使用别名模板推导:

template <typename I>
using A_float = A<float, I>;

int main() {
    A_float a(42);
    auto aa = A_float(42);
}

在 godbolt.org 上试用:演示

或者,您可以定义一个函数并从函数参数中make推断。I由于复制省略,这不亚于A直接构造:

template <typename T, typename I>
auto make_a(I i) { return A<T, I>(i); }

int main() {
    auto a = make_a<float>(42);
}

在 godbolt.org 上试用:演示

于 2021-02-27T05:59:51.547 回答