gpt4 book ai didi

c++ - 无论如何我可以让一个模板接受多个值吗?

转载 作者:可可西里 更新时间:2023-11-01 16:32:42 25 4
gpt4 key购买 nike

我写了这段代码,它目前可以接受一个 void 回调并向它传递一个值。但是,有什么办法可以让用户能够设置多个参数?也许像 Callback Caller 这样的东西;而不是不定义多个类型名称的回调?我能以某种方式将所有这些都放入一个类型名称中吗?

例如,这是我的类(class)

template <typename T>
class Callback
{
private:
std::vector<std::function <void (T)>> func;
public:
virtual void operator += (std::function<void (T)> _func)
{
func.push_back(_func);
}

};

我是这样使用的:

Callback<int> Test;

如果我只想将一个参数传递给我的函数,它工作得很好。但是,是否有可能使用户能够定义多个值,而无需使用多个类型名称?

Callback< <(int, int, int)> > Test;

类似的东西?

最佳答案

在 C++11 中,使用可变参数模板:

template <typename... Ts>
// ^^^^^^ Parameter pack
class Callback
{
private:
std::vector<std::function <void (Ts...)>> func;
// ^^^^^
// Parameter pack expansion
public:
virtual void operator += (std::function<void (Ts...)> _func)
// ^^^^^
// Parameter pack expansion
{
func.push_back(_func);
}
};

现在您可以通过这种方式实例化您的类:

Callback<int, int, int>
Callback<double, std::string>
Callback<bool>
Callback<>
...

关于c++ - 无论如何我可以让一个模板<typename T>接受多个值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16802972/

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