gpt4 book ai didi

c++ - 在位置 N 处检索 C++ 可变参数模板常量参数值的适当方法是什么?

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

我想知道在位置 N(N 在编译时已知)处检索可变参数模板常量参数值的正确方法是什么。例如,假设您有一个模板接收可变数量的函数指针作为参数,您需要检索第二个函数指针。现在,我能想到的只有这个……

typedef int (*func)(int);

template< func... F >
struct testme
{
inline int getme(int p) const
{
return std::array< func , sizeof... (F) >{F...}[1](p);
}
};

...不用说,这是非常骇人听闻的。有一个更好的方法吗?谢谢。

编辑:

基于 typedeftemplate 的代码,我制作了一个可以接受任何类型作为可变模板参数的版本。它已经过测试,可以在 GCC 4.6 的实验版本上工作。我发现它可能对其他人有用,所以它就...

template< std::size_t I, typename T, T... Args >
struct va_lookup;

template< std::size_t I, typename T, T Arg, T... Args >
struct va_lookup< I, T, Arg, Args... >
{
static_assert(I <= sizeof... (Args), "index is out of bound");
static constexpr T value = va_lookup< I - 1, T, Args... >::value;
};

template< typename T, T Arg, T... Args >
struct va_lookup< 0, T, Arg, Args... >
{
static constexpr T value = Arg;
};

最佳答案

我认为你可以按照这些思路使用一些东西:

template <int Index, int... Args> struct LookupAtIndex;
template <int Index, int First, int... Rest> struct LookupAtIndex<Index, First, Rest...> {
static constexpr int result = LookupAtIndex<Index - 1, Rest...>::result;
};
template <int First, int... Rest> struct LookupAtIndex<0, First, Rest...> {
static constexpr int result = First;
};

我还没有对此进行测试,但至少从直觉上看它应该可以正常运行。

关于c++ - 在位置 N 处检索 C++ 可变参数模板常量参数值的适当方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788013/

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