C++ 具有 2 个模板参数的类,具有 1 个参数的函数
C++ Class with 2 template arguments, function with 1 argument
有没有办法调用只接受 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++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 当类成员参数具有相同的名称时,如何定义构造函数?
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 如果参数具有成员变量,则专用化函数
- 如何要求C++模板参数具有具有给定签名的某些方法
- 可以 main() 及其参数具有属性
- 如何执行两个函数参数具有相同的模板类型
- 为什么在指定其所有模板参数具有默认值的模板类时需要<>?
- 错误:候选函数不可行:'this'参数具有类型 'const' 但方法未标记为 const
- 格式“%lf”期望“ double *”类型的论点,但参数2具有“ poly term **”类型
- JUCE - 成员函数不可行:'this'参数具有常量类型
- boost ::变体 - 为什么模板参数比const字符串参数具有更高的优先级
- 一元*的类型冲突error和无效类型参数具有int
- 映射迭代器:一元'*'的无效类型参数(具有"int")
- 模板参数-具有可变参数的函数指针
- 为什么使用内联函数的程序根据链接顺序和参数具有不同的行为
- 一元 '*' 的 #define 和无效类型参数(具有 'double')
- 重载模板化函数,根据模板参数具有不同的返回类型
- 强制模板参数具有特定的运算符
- 同一参数具有多个类型的函数