考虑这个例子:
#include <memory>
template<typename T>
class A {};
template<typename T1, typename T2>
class B: public A<T1> {};
template<typename T = int>
void foo(std::shared_ptr< A<T> > test)
{
}
int main()
{
auto p = std::make_shared<B<int, int>>();
foo<int>(p); // Works
foo<>(p); // Does not work
foo(p); // Does not work
}
Run Code Online (Sandbox Code Playgroud)
我试图在没有为foo明确指定类型T的情况下编译它,但它不起作用.我不确定为什么好像我明确表示类型T,它工作正常,但如果我,它不编译,即使我已经告诉编译器,如果我不这样做类型T应该是什么明确指定它.
我明白为什么编译器不能推断类型T,但为什么我不指定它时它不能使用我的默认类型T?我如何解决这个问题以及"正确"的做法是什么?
c++ polymorphism default-parameters template-argument-deduction