如果我有一个使用int模板化的模板化函数,我如何对这个整数的值进行编译时分支?例如:
template<int Dimension>
std::string get_name() {
// if Dimension == 1 return "line";
// else if Dimension == 2 return "area";
// else if Dimension == 3 return "volume";
// else return std::std::to_string(Dimension) + "D construct";
}
如何实现此分支?
第二个问题:如何将Dimension的有效值限制为1-100?
您可以为分支使用模板专用化:
template<int Dimension>
std::string get_name() {
return std::to_string(Dimension) + "D construct";
}
template<>
std::string get_name<1>() {
return "line";
}
和SFINAE为了限制尺寸:
template<int Dimension>
std::enable_if_t<Dimension <= 100 , std::string> get_name() {
return std::to_string(Dimension) + "D construct";
}
template<>
std::string get_name<1>() {
return "line";
}