自动类模板?

时间:2008-11-12 21:02:39

标签: c++ templates

有没有办法让编译自动推断出模板参数?

template<class T> 
struct TestA 
{
    TestA(T v) {} 
};
template<class T>
void TestB(T v)
{
}
int main()
{
    TestB (5);
}

测试B工作正常,但是当我将其更改为TestA时,它将无法使用错误编译“使用类模板需要模板参数列表”

2 个答案:

答案 0 :(得分:11)

不,没有。永远不会推断出类模板。通常的模式是拥有make_自由函数:

template<class T> TestA<T> make_TestA(T v)
{
    return TestA<T>(v);
}

例如,请参阅std::pairstd::make_pair

在C ++ 0x中你可以做到

auto someVariable = make_TestA(5);

避免必须指定局部变量的类型。

答案 1 :(得分:0)

阳光是对的,但是如果我可以问你一个问题:你的代码真的是个问题。我的意思是:

TestA(5);

会变成

TestA<int>(5);

只要它只是一个模板参数,它就不那么糟了,恕我直言。在大多数情况下,这并不像你可以绕过键入类型一次。