有没有一种方法可以让编译器自动推断出模板参数?

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

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

最佳答案

不,没有。永远不会推导出类模板。通常的模式是拥有一个make_ free函数:

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

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

在C++ 0x中,您将能够执行
auto someVariable = make_TestA(5);

避免为局部变量指定类型。

10-07 17:13