gpt4 book ai didi

C++:带有可变参数的 Hacky 参数模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:50 25 4
gpt4 key购买 nike

是否可以使用 C++ 可变参数来定义一个函数,该函数完全允许以下调用:

f(int, char)
f(int, char, char)
f(int, char, char, int)
f(int, char, char, int, char)
...

如果 n 是素数,则每个第 n 个参数都是一个 char,否则它是一个 int。函数只能这样调用;它不会与其他参数模式一起编译(例如 f(2, 2) 是一个错误,但是 f(2, '2') 是可以的)。

最佳答案

假设:

constexpr bool is_prime(size_t);

然后是这样的:

template <typename... Ts> struct typelist;

template <size_t... Is>
constexpr auto expected(std::index_sequence<Is...>)
-> typelist<std::conditional_t<is_prime(Is+1), char, int>...>;

template <typename... Ts,
std::enable_if_t<std::is_same<
typelist<Ts...>,
decltype(expected(std::index_sequence_for<Ts...>{}))
>::value, int> = 0>
auto f(Ts... ts);

关于C++:带有可变参数的 Hacky 参数模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755658/

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