虽然这样理论上可以
但编译器说模棱两可
也许是因为模板函数不支持偏特化
#include <iostream>
#include <vector>
template <typename T>
T make();
template <>
template <typename E>
std::vector<E> make()
{
return {};
}
int main(int argc, char *argv[])
{
std::vector<int> vec =
make<std::vector<int>>();
return 0;
}
但是可以用类模板
因为类模板支持偏特化
#include <iostream>
#include <vector>
template <typename T>
struct Make
{
T operator()() const;
};
template <typename E>
struct Make<std::vector<E>>
{
std::vector<E> operator()() const
{
return {};
}
};
int main(int argc, char *argv[])
{
Make<std::vector<int>>()();
return 0;
}