Надо написать функцию, которая принимает любой параметр и передаёт его нужной перегрузке другой заранее известной функции.
Пример кода:
#include "stdio.h"
struct CR1
{
CR1 ()
{ printf("CR1 ctor at %x\n", this); }
~CR1 ()
{ printf("CR1 dtor at %x\n", this); }
CR1 (const CR1&)
{ printf("CR1 copyctor at %x\n", this); }
CR1& operator = (const CR1&)
{ printf("CR1 = at %x\n", this); }
};
struct CR2
{
CR2 ()
{ printf("CR2 ctor at %x\n", this); }
~CR2 ()
{ printf("CR2 dtor at %x\n", this); }
CR2 (const CR2&)
{ printf("CR2 copyctor at %x\n", this); }
CR2& operator = (const CR2&)
{ printf("CR2 = at %x\n", this); }
};
struct Base
{
Base (const CR1& cr)
{ printf("const CR1&\n"); }
Base (CR2& cr)
{ printf("CR2&\n"); }
};
struct Derived : Base
{
template <typename Arg>
Derived(const Arg& arg) : Base(arg) {} // что сюда писать?
};
int main ()
{
{
CR1 cr;
Derived der(cr);
}
getchar();
return 0;
}
Допустим, Base переделывать нельзя. Надо, чтобы Derived жрал все конструкторы базы.
Конструктор Derived — типа универсальный передатчик. Но что-то не заладилось.
Сейчас у меня стоит const Arg& arg, и если я попробую передать в конструктор CR2 вместо CR1, то компилятор меня пошлёт, потому что константную ссылку переделать в неконстантную нельзя.
Если я напишу "универсальный конструктор" как Arg& arg, то будет проблема с попыткой передать в него временный объект.
warning C4239: nonstandard extension used : 'argument' : conversion from 'CR1' to 'CR1 &'
Если я напишу его как Arg arg, то проблем никаких не будет. Будет лишь лишнее копирование, что видно по выводу программы.
Написать два конструктора не предлагать, потому что у меня может быть 8 таких параметров.