C++11 C+中的模板化参数推导+;
是否有任何方法可以构造此代码,以便我不必指定C++11 C+中的模板化参数推导+;,c++11,C++11,是否有任何方法可以构造此代码,以便我不必指定bar的模板参数 i、 e.它当前未编译,但如果我在main中将bar(v)更改为bar(v),它将编译 #include <cstdlib> #include <vector> template <class T> struct foo { foo(std::vector<T>& v) { } }; template <class T> void bar(
bar
的模板参数
i、 e.它当前未编译,但如果我在main
中将bar(v)
更改为bar(v)
,它将编译
#include <cstdlib>
#include <vector>
template <class T>
struct foo
{
foo(std::vector<T>& v)
{
}
};
template <class T>
void bar(const foo<T>& f)
{
}
int main()
{
std::vector<int> v;
bar(v); // does not compile
bar<int>(v); // compiles but is undesirable
return EXIT_SUCCESS;
}
#包括
#包括
模板
结构foo
{
foo(std::vector&v)
{
}
};
模板
空栏(恒富和恒富)
{
}
int main()
{
std::向量v;
bar(v);//不编译
bar(v);//编译,但不需要
返回退出成功;
}
编译器只允许进行一次隐式转换,但您可以为bar
添加重载,该重载尝试将您提供的任何内容转换为foo
,然后使用临时foo
调用原始bar
(如果原始代码中允许进行两次隐式转换,则会发生这种情况):
模板
空心钢筋(T&v){
返回杆(foo(v));
}
由于foo
中的转换构造函数不接受const&
的参数,因此该条也不能重载
template<typename T>
void bar(T& v) {
return bar(foo(v));
}