У меня возникли трудности с использованием std::placeholders
в моей функции, которая принимает вариационный шаблон. Я начинаю думать, что мне не нужно использовать вариационный шаблон, но я так долго пробовал это, я думаю о сорняках и нуждаюсь в том, чтобы кто-то с новым взглядом.Использование std :: placeholders в вариативных шаблонах
Следующая шаблонная функция принимает обычный шаблонный аргумент, а затем переменный аргумент. Это вызывает ошибку компиляции:
registerEvent<UpdaterComponent, std::_Ph<1>>(EVT_INIT, &UpdaterComponent::initialise, std::placeholders::_1);
Ошибка компилятора:
Error 1 error C2664: 'Status Component::registerEvent>(const int &,Status UpdaterComponent::* (__cdecl )(const EventArgs &),std::_Ph<1>)' : cannot convert argument 2 from 'Status (__thiscall UpdaterComponent::)(const EventArgs &)' to 'Status UpdaterComponent::* (__cdecl *)(const EventArgs &)'
Что именно происходит здесь не так, и как я могу исправить эту ошибку компилятора?
// In class Component
template<typename T, typename... Params>
Status registerEvent(int evtId, Status T::*func(const EventArgs& evtArgs), Params...)
{
... irrelevant code removed for brevity
auto res = std::bind(func, this, Params...);
... irrelevant code removed for brevity
}
// Usage
class UpdaterComponent : public Component
{
public:
UpdaterComponent()
{
registerEvent<UpdaterComponent, std::_Ph<1>>(EVT_INIT, &UpdaterComponent::initialise, std::placeholders::_1);
}
};
Можете ли вы показать 'UpdaterComponent :: initialize'? – melak47
Кроме того, 'Status T :: * func (const EventArgs & evtArgs)', вероятно, должен быть 'Status (T :: * func) (const EventArgs & evtArgs)' – melak47