gpt4 book ai didi

c++ - 可变参数模板类,用于延迟调用可变参数模板函数

转载 作者:行者123 更新时间:2023-11-30 02:42:16 24 4
gpt4 key购买 nike

我可以创建一个模板类,将一些值存储在一个属性中,然后让我稍后调用一个方法,该方法使用此 arg 调用一个函数。像这样:

template <typename U> void g(U u) { cout << u << endl; }
template <typename U> class C {
public:
U u;
C(U u) { this->u = u; }
void m() { g(u); }
};

int main() {
C<double> c(5.5);
c.m();
}

但是如何使用可变参数模板实现相同的效果呢?我想写这样的东西:

template <typename ... T> void f(T... a) { cout << "generik" << endl; }

template <typename ... T> class B {
public:
T... arg;
B(T... arg) {
this->arg = arg;
}
void m() { f(arg); }
};

int main() {
B<int,double> b(1,1.1);
b.m();
}

我知道它不会工作,因为我们不能声明解压参数类型的成员。

我可以对列表的某些参数进行模式匹配,然后在给定数量的参数给定的情况下调用该函数,但我想以通用方式进行。有没有一种优雅的方式来做到这一点?

最佳答案

您可以使用如下内容:

template <typename... Ts> class B
{
public:
std::tuple<Ts...> t;
B(Ts... args)
: t(args...)
{
}
void m() { call_f(std::index_sequence_for<Ts>()); }

private:
template <std::size_t ... Is>
void call_f(std::index_sequence<Is...>)
{
f(std::get<Is>(t)...);
}
};

注意 std::index_sequence_for (std::make_index_sequence) 和 std::index_sequence 是 C++14 但可以写成在 C++11 中。

Live example .

关于c++ - 可变参数模板类,用于延迟调用可变参数模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280629/

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