gpt4 book ai didi

c++ - 将函数参数限制为某些枚举值

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:19 26 4
gpt4 key购买 nike

这是我的第一次尝试-

#include <iostream>
using namespace std;

enum class props {
left, right
};

template<typename T>
auto allowLeftOnly(T p) -> decltype((p==props::left), void())
{
cout << "Wow!";
}

int main() {
props p1 = props::left;
props p2 = props::right;
allowLeftOnly(p1);
// allowLeftOnly(p2); // should fail to compile
}

我想从 allowLeftOnly 函数中得到的是只接受 props::left 或我明确指定为参数的其他参数,而无法为其他参数编译。这可能吗?

最佳答案

不,这是不可能的。 p1p2 的值是运行时属性,而不是编译时属性,因此编译器在编译时不会“知道”它们的值。

您可以使用 constexpr 让它们在编译时已知,并将它们作为模板参数传递,例如:

#include <iostream>
#include <type_traits>

enum class props {
left, right
};

template <props v>
typename std::enable_if<v == props::left, void>::type allowLeftOnly()
{ std::cout << "Wow!\n"; }

int main() {
constexpr auto p1 = props::left;
constexpr auto p2 = props::right;
allowLeftOnly<p1>();
allowLeftOnly<p2>(); // Fails to compile
}

关于c++ - 将函数参数限制为某些枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44844475/

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