Max*_*xpm 13 c++ xcode templates implicit
以下代码在Xcode中生成编译错误:
template <typename T>
struct Foo
{
Foo(T Value)
{
}
};
int main()
{
Foo MyFoo(123);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
error: missing template arguments before 'MyFoo'
更改Foo MyFoo(123);以Foo<int> MyFoo(123);修复问题,但编译器是否应该能够找出相应的数据类型?
这是一个编译器错误,还是我误解了隐式模板参数?
Jon*_*pan 12
理论上,构造函数可以推断它正在构造的对象的类型,但声明:
Foo MyFoo(123);
Run Code Online (Sandbox Code Playgroud)
为临时空间分配MyFoo并且必须知道完全限定类型,MyFoo以便知道需要多少空间.
如果您想避免键入(即用手指)特别复杂模板的名称,请考虑使用typedef:
typedef std::map<int, std::string> StringMap;
Run Code Online (Sandbox Code Playgroud)
或者在C++ 0x中,您可以使用auto关键字让编译器使用类型推断 - 尽管许多人认为这会导致可读性更低且更容易出错的代码,我自己就是这样.,p
编译器只能为模板化函数找出模板参数类型,而不是类/结构