gpt4 book ai didi

c++ - 具有2个模板参数的C++类,具有1个参数的函数

转载 作者:行者123 更新时间:2023-12-02 10:30:47 24 4
gpt4 key购买 nike

有什么方法可以调用只包含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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com