几乎总是使用带有模板化构造函数的自动规则?

时间:2015-07-22 10:05:41

标签: c++ c++14

我最近在C ++ 14中采用了Almost Always Auto的模式,但遇到了一个案例,我无法弄清楚如何使用auto语法编写:模板化构造函数

说我有班级:

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

我试过了:

auto var = my_type<float>{};

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

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

1 个答案:

答案 0 :(得分:1)

虽然它并非真正关于auto,但如果你愿意,有一种选择模板化ctors的方法 - 你需要作弊,并给他们一个参数。

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.
}