gpt4 book ai didi

c++ - 编译器何时可以推断模板参数?

转载 作者:IT老高 更新时间:2023-10-28 12:38:50 25 4
gpt4 key购买 nike

有时有效,有时无效:

template <class T> 
void f(T t) {}

template <class T>
class MyClass {
public:
MyClass(T t) {}
};

void test () {
f<int>(5);
MyClass<int> mc(5);
f(5);
MyClass mc(5); // this doesn't work
}

有没有办法破解上面的例子? IE。强制编译器从构造函数参数推断模板参数。

这个问题会在未来得到解决,还是有充分的理由不解决?

编译器可以推断模板参数的一般规则是什么?

最佳答案

当可以从模板参数中推断出参数类型时,可以为函数模板推断模板参数

所以可以在这里推断:

template <typename T>
void f(T t);

template <typename T>
void f(std::vector<T> v);

但不在这里:

template <typename T>
T f() {
return T();
}

而不是在类模板中

所以你的问题通常的解决方案是创建一个包装函数,类似于标准库函数 std::make_pair:

  template <class T>
class MyClass {
public:
MyClass(T t) {}
void print(){
std::cout<<"try MyClass"<<std::endl;
}
};

template <typename T>
MyClass<T> MakeMyClass(T t) { return MyClass<T>(t); }

然后调用auto a = MakeMyClass(5);来实例化类。

关于c++ - 编译器何时可以推断模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797594/

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