我最近在C ++ 14中采用了Almost Always Auto的模式,但遇到了一个案例,我无法弄清楚如何使用auto
语法编写:模板化构造函数
说我有班级:
class my_type{
public:
template<typename T>
my_type(){/* ... */}
};
我试过了:
auto var = my_type<float>{};
当然,这不起作用,因为假设my_type
是模板而不是其构造函数。
那我怎么能用auto
语法来初始化这个变量?
答案 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.
}