gpt4 book ai didi

知道其参数位置的 C++ 模板

转载 作者:行者123 更新时间:2023-12-03 06:55:53 25 4
gpt4 key购买 nike

我是 C++ 元编程的新手,几天前我决定编写一个带有可变参数包的模板,它知道参数包中的哪个位置最先 int .更准确地说,我想要一个 struct名称 GetIntPos static constexpr int value表示int的位置在以 1 开头的参数包中,如果没有 int 则为 0参数包中的参数类型。例如

cout<<GetIntPos<long, char, int, long>::value; // must print 3
cout<<GetIntPos<int, int, long>::value; // must print 1

cout<<GetIntPos<long, long, char>::value; // must print 0;

如何实现?

最佳答案

这似乎在我的测试中有效:

namespace detail {
template <int INDEX>
constexpr int GetIntPosImpl() {
return 0;
}

template <int INDEX, typename T, typename ...Ts>
constexpr int GetIntPosImpl() {
if constexpr(std::is_same_v<T, int>) {
return INDEX;
}
else {
return GetIntPosImpl<INDEX + 1, Ts...>();
}
};
}

template <typename ...Ts>
struct GetIntPos {
static constexpr int value = detail::GetIntPosImpl<1, Ts...>();
};

int main() {
std::cout << GetIntPos<short, long, char>::value << '\n';
std::cout << GetIntPos<int, short, long, char>::value << '\n';
std::cout << GetIntPos<short, long, char, int>::value << '\n';
return 0;
}

我的输出:

0
1
4

关于知道其参数位置的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64016051/

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