我正在尝试使用一些参数为模板类准备一些专用函数。如何告诉settings
print_settings
接受testl
以及testllb
?我如何宣布long * / bool实例以及为什么编译器不能为其他类型(当时给出的)推断出正确的类型?
#include <iostream>
#include <type_traits>
template <typename T, T const *a=nullptr, bool const b=false>
class settings {
public:
friend std::ostream operator<<(std::ostream &os, const settings &set) {
os << set.min_val();
}
T const min_val() const {return a ? *a : -1;};
};
long l0{0};
void print_settings(settings<long> t) {
std::cout << "INTEGER: " << t.min_val() << std::endl;
}
int main(int argc, char *argv[]) {
settings<long> testl;
print_settings(testl);
settings<long, &l0, true> testllb;
// print_settings(testllb); // This is failing.
return 0;
}
答案 0 :(得分:0)
settings<long>
和settings<long, &l0, true>
是不同的类。
因此,我们每个班级都需要重载。
实现这一目标的最简单方法是使用模板功能:
template <long const *a, const bool b>
void print_settings(settings<long, a, b> t) {
std::cout << "INTEGER: " << t.min_val() << std::endl;
}