c++ - 隐式模板参数

标签 c++ xcode templates implicit

以下代码在 Xcode 中生成编译错误:

template <typename T>
struct Foo
{
    Foo(T Value)
    {
    }
};

int main()
{
    Foo MyFoo(123);
    return 0;
}

error: missing template arguments before 'MyFoo'

更改 Foo MyFoo(123);Foo<int> MyFoo(123);解决了这个问题,但编译器不应该能够找出适当的数据类型吗?

这是编译器的错误,还是我误解了隐式模板参数?

最佳答案

构造函数理论上可以推断出它正在构造的对象的类型,但是语句:

Foo MyFoo(123);

正在为 MyFoo 分配临时空间,并且必须知道 MyFoo 的完全限定类型才能知道需要多少空间。

如果您想避免输入(即用手指)特别复杂的模板的名称,请考虑使用 typedef:

typedef std::map<int, std::string> StringMap;

或者在 C++0x 中,您可以使用 auto 关键字让编译器使用类型推断——尽管许多人会认为这会导致代码可读性降低且更容易出错,我自己就是其中之一. ;p

关于c++ - 隐式模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947294/

相关文章:

c++ - 构造函数继承和自定义构造函数

ios - 在 xib 上,拖动 View 会自动进入更大的 View

ios - Swift 在不知道类型的情况下转换泛型

ios - AR引用图像 - 图像的直方图较窄

python - 打印从 django 表单输入的内容

c++ - 在编译时在 C++ 元编程中使用运行时参数(变量)

c++ - 模板被推断为模板变量的错误类型

c++ - boost::asio:数据损坏

c++ - 类模板部分特化

c++ - 复制构造函数中类级数组的 memcpy 会导致段错误