将函数返回用于另一个模板函数 C++

exp*_*t3r 2 c++ enums templates

我正在尝试使用另一个函数的返回来调用模板化函数,但我似乎无法让它工作。

enum class MYENUM {
    X1,X2
};

MYENUM SomeFunc() {
    return MYENUM::X1;
}

template<MYENUM T>
void ENUMFunc() {
    //do something
}

int main() {
    ENUMFunc<MYENUM::X1>(); //works
    ENUMFunc<SomeFunc()>(); //error?
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 7

您只能对非类型模板参数的值使用常量表达式。为了得到这一点,你需要标记为像SomeFuncconstexpr

constexpr MYENUM SomeFunc() {
    return MYENUM::X1;
}
Run Code Online (Sandbox Code Playgroud)

现在可以让您将它用于模板参数,如本例中所示