有没有办法让编译自动推断出模板参数?
template<class T>
struct TestA
{
TestA(T v) {}
};
template<class T>
void TestB(T v)
{
}
int main()
{
TestB (5);
}
测试B工作正常,但是当我将其更改为TestA时,它将无法使用错误编译“使用类模板需要模板参数列表”
答案 0 :(得分:11)
不,没有。永远不会推断出类模板。通常的模式是拥有make_
自由函数:
template<class T> TestA<T> make_TestA(T v)
{
return TestA<T>(v);
}
例如,请参阅std::pair
和std::make_pair
。
在C ++ 0x中你可以做到
auto someVariable = make_TestA(5);
避免必须指定局部变量的类型。
答案 1 :(得分:0)
阳光是对的,但是如果我可以问你一个问题:你的代码真的是个问题。我的意思是:
TestA(5);
会变成
TestA<int>(5);
只要它只是一个模板参数,它就不那么糟了,恕我直言。在大多数情况下,这并不像你可以绕过键入类型一次。