我有一个正常运行的虚拟函数add
它采用以下设置:如何可变参数PARAMS传递到虚拟函数
using Func = std::function<std::vector<unsigned char>()>;
class cfExecutor {
public:
cfExecutor();
virtual ~cfExecutor();
/// Enqueue a function to be executed by this executor. This and all
/// variants must be threadsafe.
virtual void add(Func) = 0;
virtual void add(std::vector<Variant> params, Func callback) = 0;
};
class ManualExecutor : public cfExecutor
{
std::mutex lock_; // avoid multiple entity updating the function container
std::queue<Func> funcs_; // functions queued for running
public:
std::map<int8_t, Func> funcs; // Function container (priority,Func) - added functions to this Executors
ManualExecutor() {}
ManualExecutor(ManualExecutor&& other):
funcs(std::move(other.funcs))
{}
~ManualExecutor() {}
void add(Func callback);
void add(std::vector<Variant> params, Func callback);
};
我当时就想可变参数PARAMS添加到功能 - 就像这样:
using Func = std::function<std::vector<unsigned char>(const auto&...args)>;
但是我得到隐含错误[隐模板可能不是“虚”]
我应该如何定义与一个可变PARAMS add函数?
到目前为止,我已经解决了它使用下列内容:
using Func = std::function<std::vector<unsigned char>(std::vector<Variant>)>;
,然后有lambda函数从向量内办理接收ARGS - 这样的事情:
auto lambdaFunction = [](std::vector<Variant> vec){
std::vector<unsigned char> result;
cout << "- Hello from executor - lambdaFunction ";
std::cout << ": parameters : ";
for(auto a: vec) {
std::cout << a << ",";
}
std::cout << std::endl;
std::string s("this is the result");
result.insert(result.end(),s.begin(), s.end());
return result;
};
当您使用自动'...''然后是Func'没有具体类型。你需要使它成为一个模板的别名,如:'使用Func键=的std ::函数模板;' –
Nawaz
你想用不同的签名添加功能到相同的cfExecuror,或具有相同可变签名或其他功能的函数? –
不同的签名将是很好的,但是SOFAR我只是想有功能,这需要可变参数PARAMS – serup