我有一个带有参数包的类
Base
和 MyFunc
模板。
我有一个类
Derived
,它在参数包中指定一个const T&
类型。
template <typename... T>
class Base {};
template <typename... T>
void MyFunc(Base<T...>, T... t) {}
class Derived : public Base<const int&> {};
void Test() { MyFunc(Derived(), 1); }
这会产生错误:
no matching function for call to 'MyFunc'
deduced conflicting types for parameter 'T' (<const int &> vs. <int>)
我怎样才能完成这项工作,以便我可以在参数包中使用
const T&
?
使一种类型不可扣除
template <typename... Ts>
void MyFunc(Base<Ts...>, std::type_identity_t<Ts>... ts) {}
或者,如果合适的话,可以制作 2 个参数包:
template <typename... Ts, typename... Us>
void MyFunc(Base<Ts...>, Us&&... us) {}