Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates c++;如何在以整数为模板的函数上进行编译时分支(以及如何限制有效值的数量)?_Templates - Fatal编程技术网

Templates c++;如何在以整数为模板的函数上进行编译时分支(以及如何限制有效值的数量)?

Templates c++;如何在以整数为模板的函数上进行编译时分支(以及如何限制有效值的数量)?,templates,Templates,如果我有一个使用int模板化的模板化函数,我如何对这个整数的值进行编译时分支?例如(我知道这不是一个很好的模板使用-这只是一个简单的例子来说明我的意思): 模板 std::string get_name(){ //如果维度==1,则返回“行”; //如果维度=2,则返回“面积”; //否则,如果维度==3,则返回“体积”; //否则返回std::std::to_字符串(维度)+“D构造”; } 我如何实现这个分支 第二个问题:如何将维度的有效值限制为1-100?您可以对分支使用模板专门化: t

如果我有一个使用int模板化的模板化函数,我如何对这个整数的值进行编译时分支?例如(我知道这不是一个很好的模板使用-这只是一个简单的例子来说明我的意思):

模板
std::string get_name(){
//如果维度==1,则返回“行”;
//如果维度=2,则返回“面积”;
//否则,如果维度==3,则返回“体积”;
//否则返回std::std::to_字符串(维度)+“D构造”;
}
我如何实现这个分支


第二个问题:如何将维度的有效值限制为1-100?

您可以对分支使用模板专门化:

template<int Dimension>
std::string get_name() {
    return std::to_string(Dimension) + "D construct";
}
template<>
std::string get_name<1>() {
    return "line";
}
模板
std::string get_name(){
返回std::to_字符串(维度)+“D构造”;
}
模板
std::string get_name(){
返回“行”;
}
和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";
}

模板

std::enable_if_t您可以对分支使用模板专门化:

template<int Dimension>
std::string get_name() {
    return std::to_string(Dimension) + "D construct";
}
template<>
std::string get_name<1>() {
    return "line";
}
模板
std::string get_name(){
返回std::to_字符串(维度)+“D构造”;
}
模板
std::string get_name(){
返回“行”;
}
和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";
}

模板

std::如果启用,请使用一个真实的示例。存在
std::string
时的编译时分支看起来毫无意义。你需要它做什么
std::string
作为常量表达式或多或少不可用。但在实践中,它将内联到一些简短的东西,哦,请使用一个真实的例子。存在
std::string
时的编译时分支看起来毫无意义。你需要它做什么
std::string
作为常量表达式或多或少不可用。但在实践中,它将内联到一些简短的东西,哦,还有