相关疑难解决方法(0)

为每个可变参数模板参数和数组调用函数

所以我有一些类型X:

typedef ... X;
Run Code Online (Sandbox Code Playgroud)

和模板功能f:

class <typename T>
void f(X& x_out, const T& arg_in);
Run Code Online (Sandbox Code Playgroud)

然后是一个功能g:

void g(const X* x_array, size_t x_array_size);
Run Code Online (Sandbox Code Playgroud)

我需要编写一个variadic模板函数h来执行此操作:

template<typename... Args>
void h(Args... args)
{
    constexpr size_t nargs = sizeof...(args); // get number of args
    X x_array[nargs]; // create X array of that size

    for (int i = 0; i < nargs; i++) // foreach arg
        f(x_array[i], args[i]); // call f (doesn't work)

    g(x_array, nargs); // call g with …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

25
推荐指数
3
解决办法
3万
查看次数

在没有递归的情况下为一个对象上的每个元组元素调用函数

我有一个类的对象A,可以使用不同的类型调用,并在每次调用时返回自我更改.出于这个问题的目的,这样A

struct A {
    A call(const int&) {
    }
    A call(const string& s) {
    }
    ////
} a;
Run Code Online (Sandbox Code Playgroud)

所以我有一个未知类型的元组:

std::tuple<Types...> t;
Run Code Online (Sandbox Code Playgroud)

我想a用每个元组元素调用,所以我希望得到类似的东西:

b = a;
b = b.call(get<0>(t));
b = b.call(get<1>(t));
b = b.call(get<2>(t));
//...
Run Code Online (Sandbox Code Playgroud)

要么

b = a.call(get<0>(t)).call(get<1>(t)).call(get<2>(t)...)
Run Code Online (Sandbox Code Playgroud)

订单并不是很重要(我的意思是,如果呼叫顺序被颠倒甚至改组,那就没关系).

我确实理解它可以用递归但它很难看.是否有可能在没有递归的情况下实现?

c++ tuples variadic-templates c++14

3
推荐指数
1
解决办法
975
查看次数

标签 统计

c++ ×2

variadic-templates ×2

c++11 ×1

c++14 ×1

templates ×1

tuples ×1