gpt4 book ai didi

c++ - 使用非常量表达式作为模板参数

转载 作者:太空狗 更新时间:2023-10-29 20:46:06 27 4
gpt4 key购买 nike

这是对 How do I get the argument types of a function pointer in a variadic template class? 的跟进

我有这个结构来访问可变参数模板的参数:

template<typename T> 
struct function_traits;

template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
static const size_t nargs = sizeof...(Args);

typedef R result_type;

template <size_t i>
struct arg
{
typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
};
};

然后我访问 Args 的参数类型

typedef function<void(Args...)> fun;
std::cout << std::is_same<int, typename function_traits<fun>::template arg<0>::type>::value << std::endl;

但是,我想遍历参数以便能够处理任意数量的参数。以下不起作用,但为了说明我想要什么:

for (int i = 0; i < typename function_traits<fun>::nargs ; i++){ 
std::cout << std::is_same<int, typename function_traits<fun>::template arg<i>::type>::value << std::endl;
}

最佳答案

您需要按照以下方式进行编译时迭代

template <typename fun, size_t i> struct print_helper {
static void print() {
print_helper<fun, i-1>::print();
std::cout << std::is_same<int, typename function_traits<fun>::template arg<i-1>::type>::value << std::endl;
}
};

template <typename fun> struct print_helper<fun,0> {
static void print() {}
};

template <typename fun> void print() {
print_helper<fun, function_traits<fun>::nargs>::print();
}

关于c++ - 使用非常量表达式作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077612/

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