有什么方法可以调用只包含1个模板参数而不是2个模板参数的类成员函数?
我想写一些这样的代码:
template<typename T, size_t N>
void Container<int, N>::quick_sort() {
}
最佳答案
您不能对方法进行部分特化,可以对整个类进行部分特化,但是需要一些重复。
template<typename T, size_t N>
class Container
{
// Some code ...
void quick_sort();
};
template <typename T,size_t N>
void Container<T, N>::quick_sort()
{
// ...
}
// Class specialization
template <size_t N>
class Container<int, N>
{
// Some similar/same code...
void quick_sort();
};
template <size_t N>
void Container<int, N>::quick_sort()
{
// ...
}
作为替代,C++ 17允许
template<typename T, size_t N>
class Container
{
// Some code ...
void quick_sort()
{
if constexpr (std::is_same_v<int, T>) {
// ...
} else {
// ...
}
}
};
对于以前的版本,常规
if
可能会产生错误(两个分支都应该有效,即使不使用也是如此)。因此,标签分发是一种简单的方法(SFINAE是另一种方法):
template <typename> struct Tag{};
template<typename T, size_t N>
class Container
{
private:
void quick_sort(tag<int>)
{
// ...
}
template <typename U>
void quick_sort(tag<U>)
{
// ...
}
public:
void quick_sort()
{
quick_sort(Tag<T>());
}
// Some code ...
};
关于c++ - 具有2个模板参数的C++类,具有1个参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62326300/