bua*_*bua 0 c++ templates metaprogramming
我想专注于以下模板:
template <typename T, int P>
T item(size_t s);
Run Code Online (Sandbox Code Playgroud)
这样的事情:
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";
}
Run Code Online (Sandbox Code Playgroud)
你不能部分专门化这样的功能模板.模板部分特化仅适用于类模板.
但是,您可以使用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)
{
....
}
Run Code Online (Sandbox Code Playgroud)
这样,如果你打电话,item<5, std::string>(10)你将调用第一个函数,如果你打电话,item<5, int>(10)你将调用第二个函数.
或者,如果您由于某种原因不想使用Boost,另一种解决方法是创建一个调度程序类模板,当然这可以是部分专用的.