我有一个从可变参数类模板deriv
派生的可变参数类模板base
。
我有一个可以接受任何类型的函数模板T
,以及类型的重载base<Ts...>
;
base<Ts...>
传递 a 时如何获得要使用的重载const deriv<Ts...>&
?
下面的工作示例:
#include <iostream>
#include <tuple>
template<typename... Ts>
struct base
{
std::tuple<Ts...> tuple;
};
template<typename... Ts>
struct deriv : base<Ts...>
{
};
//--------------------------------
template<typename T>
void func(const T&)
{
std::cout << "T" << std::endl;
}
template<typename... Ts>
void func(const base<Ts...>&)
{
std::cout << "base<Ts...>" << std::endl;
}
//----------------------------------------
int main()
{
int a;
base <int, double> b;
deriv<int, double> c;
func(a);
func(b);
func(c); // <--- I want func<base<Ts...>> not func<T> to be called here
exit(0);
}
示例的输出:
T
base<Ts...>
T
我想要的输出是:
T
base<Ts...>
base<Ts...>