У меня есть рабочая виртуальная функция add
, которая использует следующие настройки:как передать VARIADIC 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);
};
Затем я хотел добавить VARIADIC Params функции - как это:
using Func = std::function<std::vector<unsigned char>(const auto&...args)>;
Однако я получаю неявную ошибку [неявные шаблоны могут быть не «виртуальными»]
Как определить функцию добавления с помощью переменных параметров?
до сих пор я решил, что с помощью следующих действий:
using Func = std::function<std::vector<unsigned char>(std::vector<Variant>)>;
, а затем с функцией лямбда обрабатывать принимающие арг внутри вектора - что-то вроде этого:
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' не конкретный тип. Вам нужно сделать его псевдонимом шаблона, например: 'template с помощью Func = std :: function ;' –
Nawaz
Вы хотите добавить функции с разными сигнатурами к тому же cfExecuror, или функции с той же вариационной сигнатурой или что-то еще? –
разных подписей было бы неплохо, однако sofar Я просто хочу иметь функции, которые принимают variadic params – serup