【发布时间】:2013-02-03 22:54:03
【问题描述】:
我有一个可变参数类模板deriv,它派生自可变参数类模板base。
我有一个函数模板,它接受任何类型T,以及base<Ts...> 类型的重载;
如何在传递const deriv<Ts...>& 时使用base<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...>
【问题讨论】:
-
有趣的问题,我花了几分钟摆弄,不幸的是没有任何结果。希望比我更好的程序员能回答。