Ответ 1
Как насчет следующего примера?
Прежде всего, мне нужно определить virtual
метод send()
в Foo
(если вы хотите, чтобы он был виртуальным).
Затем вы можете объявить промежуточный шаблонный класс (Foo2
), где реализуется override
send()
Наконец, вы можете использовать метод шаблона send()
в Bar
, чтобы выбрать правильный виртуальный метод send()
.
#include <iostream>
template <typename T>
struct Foo
{ virtual void send(T t) = 0; };
template <typename T>
struct Foo2 : Foo<T>
{
void send(T) override
{ std::cout << "sizeof[" << sizeof(T) << "] " << std::endl; }
};
template <typename...T>
struct Bar : Foo2<T>...
{
template <typename U>
void send (U u)
{ Foo2<U>::send(u); }
};
int main()
{
Bar<int, double> b;
b.send(1); // print sizeof[4]
b.send(2.3); // print sizeof[8]
}