我认为这是不可能的,但必须有人知道得更多......
template<typename T>
T Read() //T is int, char, etc
{
return read<T>();
}
template<typename T, Size>
std::array<T,Size> Read<std::array<T, Size>>()
{
return unique_read<T, Size>();
}
我想一旦我指定了任何模板参数,它就不再是完全特化,并且函数中不允许部分特化
我唯一能想到的是:
template<typename T>
struct _dummy
{
T Read() {
return T();
};
};
template<typename T, size_t Size>
struct _dummy<std::array<T, Size>>
{
using ArrayType = std::array<T, Size>;
ArrayType Read() {
return ArrayType();
};
};
最佳答案
你应该为这种工作使用标签调度:
namespace detail {
template<class T>struct tag{};
template<class T>
T Read(tag<T>) {
return T{};
}
template<class T, std::size_t N>
std::array<T, N> Read(tag<std::array<T, N>>) {
return {1,2,3};
}
}
template<class T>
auto Read() {
return detail::Read(detail::tag<T>());
}
int main() {
Read<std::array<int,5>>();
}
关于c++ - 不带参数的部分特化函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209675/