Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动类模板?_C++_Templates - Fatal编程技术网

C++ 自动类模板?

C++ 自动类模板?,c++,templates,C++,Templates,有没有办法让编译器自动推断模板参数 template<class T> struct TestA { TestA(T v) {} }; template<class T> void TestB(T v) { } int main() { TestB (5); } 模板 结构测试 { 种皮(tV){} }; 模板 无效测试B(T v) { } int main() { TestB(5); } 测试B工作正常,但是当我将其更改为TestA时,它将不会

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

template<class T> 
struct TestA 
{
    TestA(T v) {} 
};
template<class T>
void TestB(T v)
{
}
int main()
{
    TestB (5);
}
模板
结构测试
{
种皮(tV){}
};
模板
无效测试B(T v)
{
}
int main()
{
TestB(5);
}

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

不,没有。类模板永远不会被推导出来。通常的模式是有一个
make\uu
free功能:

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

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

Sunlight是正确的,但如果我可以问你一个问题:这真的是你代码中的问题吗。我的意思是:

TestA(5);
将成为

TestA<int>(5);
TestA(5);

只要它只是一个模板参数,就没那么糟糕了。在大多数情况下,你不可能只键入一次类型。

事实上,这确实是一个问题,是的。在泛型代码中,您通常无法很容易地拼写出类型。
TestA<int>(5);