gpt4 book ai didi

c++ - 如何正确删除模板函数中的代码重复

转载 作者:行者123 更新时间:2023-11-30 01:42:39 24 4
gpt4 key购买 nike

我有这样的代码(类似“宇宙飞船”的运算符)。

template <class T>
int comparator(const T &a, const T &b){
if (a < b){
return -1;
}else if (a > b){
return +1;
}

return 0;
}

inline int comparator(const char *a, const char *b){
return strcmp(a, b); // I never tried this, included just to get the idea
}

inline int comparator(char const a, char const b){
return a - b;
}

inline int comparator(int const a, int const b){
return a - b;
}

我怎样才能轻松删除几个有符号类型(char、short、int、long 等)的重复。我尝试使用 SFINAE,但结果不是很令人鼓舞。

最佳答案

您可以将重载、标记分发和模板混合在一起,如下例所示:

#include<type_traits>
#include<utility>
#include<iostream>

template <class T>
int comparator_(char, const T &a, const T &b){
std::cout << "catch all" << std::endl;
return (a<b)?-1:((a>b)?1:0);
}

template<typename T>
std::enable_if_t<std::is_same<T,int>::value or std::is_same<T,char>::value, int>
comparator_(int, T const a, T const b){
std::cout << "char or int" << std::endl;
return a - b;
}

template<typename... A>
int comparator(A&&... args) {
return comparator_(0, std::forward<A>(args)...);
}

int main() {
comparator(42,0);
comparator('c', 'g');
comparator(42u, 0u);
}

关于c++ - 如何正确删除模板函数中的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39311203/

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