#include <iostream>
using namespace std;
template<class T>
class A {
protected:
T m_i;
virtual void m_set(T i)
{
m_i=i;
};
public:
template<typename ... Args>
void setParams( Args&&... params )
{
m_set(std::forward<Args>(params)...);
}
virtual void show()
{
cout << m_i << endl;
}
};
template<class T, typename ... args>
class B: public A<T> {
protected:
using A<T>::m_i;
T m_j;
virtual void m_set(T i, T j)
{
m_i=i;
m_j=j;
}
public:
virtual void show() override
{
cout << m_i << ':' << m_j << endl;
}
};
int main() {
auto a = new A<int>;
a->setParams(22);
a->show();
A<int>* b = new B<int>;
a->setParams(22,23);
a->show();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEEgewpwcm90ZWN0ZWQ6CglUIG1faTsKCXZpcnR1YWwgdm9pZCBtX3NldChUIGkpIAoJewoJCW1faT1pOwoJfTsKcHVibGljOgkKCXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBBcmdzPgoJdm9pZCBzZXRQYXJhbXMoIEFyZ3MmJi4uLiBwYXJhbXMgKSAKCXsgCgkJbV9zZXQoc3RkOjpmb3J3YXJkPEFyZ3M+KHBhcmFtcykuLi4pOyAKCX0KCXZpcnR1YWwgdm9pZCBzaG93KCkKCXsgCgkJY291dCA8PCBtX2kgPDwgZW5kbDsKCX0KfTsKCgp0ZW1wbGF0ZTxjbGFzcyBULCB0eXBlbmFtZSAuLi4gYXJncz4KY2xhc3MgQjogcHVibGljIEE8VD4gewpwcm90ZWN0ZWQ6Cgl1c2luZyBBPFQ+OjptX2k7CiAgICBUIG1fajsKICAgIHZpcnR1YWwgdm9pZCBtX3NldChUIGksIFQgaikgCiAgICB7CiAgICAJbV9pPWk7CiAgICAJbV9qPWo7CiAgICB9CnB1YmxpYzoJCgl2aXJ0dWFsIHZvaWQgc2hvdygpIG92ZXJyaWRlIAoJeyAKCQljb3V0IDw8IG1faSA8PCAnOicgPDwgbV9qIDw8IGVuZGw7Cgl9IAp9OwoKCmludCBtYWluKCkgewoJYXV0byBhID0gbmV3IEE8aW50PjsKCWEtPnNldFBhcmFtcygyMik7CglhLT5zaG93KCk7CgkKCUE8aW50PiogYiA9IG5ldyBCPGludD47CglhLT5zZXRQYXJhbXMoMjIsMjMpOwoJYS0+c2hvdygpOwoKCXJldHVybiAwOwp9
prog.cpp: In instantiation of ‘void A<T>::setParams(Args&& ...) [with Args = {int, int}; T = int]’:
prog.cpp:34:20: required from here
prog.cpp:12:44: error: no matching function for call to ‘A<int>::m_set(int, int)’
void setParams( Args&&... params ) { m_set(std::forward<Args>(params)...); }
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cpp:9:15: note: candidate: void A<T>::m_set(T) [with T = int]
virtual void m_set(T i) {m_i=i;};
^~~~~
prog.cpp:9:15: note: candidate expects 1 argument, 2 provided