对于模板化的构造函数,几乎总是使用Auto规则

Almost Always Use Auto rule with templated constructor?

本文关键字:规则 Auto 于模板 构造函数      更新时间:2023-10-16

我最近在c++ 14中采用了几乎总是自动的模式,但是遇到了一个情况,我无法弄清楚如何使用auto语法编写:模板化构造函数。

假设我有一个类:

class my_type{
    public:
        template<typename T>
        my_type(){/* ... */}
};

我试着:

auto var = my_type<float>{};

当然,这不起作用,因为它假定my_type是模板而不是它的构造函数。

那么我怎么能使用auto语法来初始化这个变量?

虽然它不是真正关于auto,有一种方法来选择模板化的,如果你想-你需要欺骗,并给他们一个参数。

struct A {
private:
    template <typename T> struct TypeWrapper {};
    template <typename T> explicit A(TypeWrapper<T>) {}
public:
    template <typename T>
    static A make_A() {
        return A(TypeWrapper<T>{});
    }
};
int main() {
    auto i = A::make_A<int>();
    auto d = A::make_A<double>();
    auto r = A::make_A<A>();
    // etc. etc.
}