本质上是利用变长模板解决参数个数的问题。
#pragma once
#include <utility>
#include <memory>
#include <vector>
#include <functional>
template <typename T>
class Creater
{
public:
Creater() : iT(nullptr) {}
~Creater() = default;
template<typename... Args>
void createT(Args&&... args)
{
iT = new T(std::forward<Args>(args)...);
}
private:
std::unique_ptr<T> iT;
};
template <typename... Args>
class CallbackHolders
{
public:
CallbackHolders() = default;
~CallbackHolders() = default;
void addCallback(std::function<void(Args...)> aCallback)
{
iCallbacks.push_back(aCallback);
}
template<typename... Args>
void invoke(Args&&... args)
{
for (auto& callback : iCallbacks)
{
callback(std::forward<Args>(args)...);
}
}
private:
std::vector<std::function<void(Args...)>> iCallbacks;
};
int main()
{
CallbackHolders<int, int> holders;
holders.addCallback([](int a, int b)->void {std::cout << "a + b = " << a + b << std::endl;
});
holders.invoke(3, 4);
CallbackHolders<std::string> holders1;
holders1.addCallback([](std::string a)->void {std::cout << a << std::endl; });
holders1.invoke("aaa");
return 0;
}
本文介绍了一种利用变长模板解决参数个数问题的方法,并通过具体的代码示例展示了如何创建一个可以接受任意数量参数的回调持有者类,用于统一处理不同参数类型的回调函数。
1066

被折叠的 条评论
为什么被折叠?



