我想专注于以下模板:
template <typename T, int P>
T item(size_t s);
变成这样的东西:
template<int P>
T item<typename T>(size_t s)
{
//for all numeric types
return static_cast<T>(rand());
}
template <int P>
string item<string>(size_t s)
{
return "asdf";
}
最佳答案
您不能像那样部分特化函数模板。模板偏特化仅适用于类模板。
但是,您可以使用 boost::enable_if
“模拟”您正在寻找的函数模板部分特化。
// Specialization for std::string
//
template <int P, typename T>
T item(size_t, typename boost::enable_if<boost::is_same<T, std::string> >::type* = 0)
{
....
}
// Specialization for int
//
template <int P, typename T>
T item(size_t, typename boost::enable_if<boost::is_same<T, int> >::type* = 0)
{
....
}
这样,如果你调用item<5, std::string>(10)
你将调用第一个函数,如果你调用 item<5, int>(10)
您将调用第二个函数。
或者,如果您出于某种原因不想使用 Boost,另一种解决方法是创建一个调度程序类模板,当然可以部分特化。
关于c++ - 如何专门化此模板(注意返回类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665231/