【发布时间】:2015-04-16 14:18:51
【问题描述】:
template< class T >
class Foo {
public:
Foo( T t ) { }
};
int main () {
int i = 0;
Foo f( i );
}
在上面的代码中,编译器抱怨在 'f' 之前缺少模板参数。我知道从构造函数的参数推断类的模板参数不是标准的一部分,但我的问题是为什么?难道编译器没有隐式实例化Foo<int> 并调用其构造函数所需的所有信息吗?
经过编辑以明确我使用int 调用构造函数(而不是short、long、void* 等)
【问题讨论】:
-
不能 0 也代表
bool或char或指针吗?还是只是隐式转换? -
关于实际问题(不是为什么),目前的 C++ 只使用工厂函数。
-
@mstbaum:虽然是这样,但我不确定这是否相关,因为其意图显然是遵循与函数相同的模板参数推导,所有这些都明确指定。
-
template<typename T> struct Foo { static void bar(T t); };也存在类似问题 - 您也不能致电Foo::bar(0)。无法从方法中推断出类型。 -
你的愿望在 C++17 中实现了 en.cppreference.com/w/cpp/language/…
标签: c++